[小白学习]Docker入门(一)

一、认识docker
1、为什么这么火?
  极大提高效率.

2、是什么?
   Docker是一个应用容器.可以运行ngnix,Node.js,java程序等等
   举例:
   Linux -> jvm -> java应用
   Linux -> Docker(jvm - java应用)

3、解决了什么问题?
 a. 部署难的问题(遇到复杂项目部署效率极低)
 b. 资源利用率低问题
 结合场景:云、DevOps

4、集装箱原理
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走

相关了解:
  A段架构、B段架构
  <<思考软件,创新设计——A段架构师的思考技术>> -- 暂不推荐购买,因为我买了快三年了,没看过。

二、Docker基础
1. 三大组件
a. 仓库 : 用来存放镜像的. 远程仓库
b. 镜像 : 类似软件的安装包或一个模板
b. 容器 : 基于镜像创建的实例

2. docker架构图(maven类似)
架构的组件: 远程仓库,docker host(linux)

图我不想画,偷懒,直接从书里截图

上图中

Registry: 我把他理解成Docker仓库,远程。

Docker Host 和 Docker client:在一台Linux机器上。Docker client获取用户输入的指令并调用Docker daemon进行相关操作。




三、docker 安装
注意尽量在centos安装

三、docker实战 - 运行一个nginx服务
1. 搜索镜像(远程)  docker search java/nginx
2. 将远程镜像安装到本地 docker pull nginx
3. 查看本地镜像  docker images
4. 新建容器并启动容器 docker run -d -p 81:80 nginx
5. 查看当前运行的容器 docker ps
6. 停止当前运行的容器 docker stop containerId
7. 启动容器 docker start containerId
8. docker ps -a 查看最近启动过的容器信息
9. 删除容器 docker rm  containerId 只能删除停止的
   -f : 强制删除,启动也可以删除
10. 删除镜像: docker rmi -f 镜像名:tag 或者镜像名:tag替换成containerId来删除。

其他命令:
1. docker logs  查看日志
   docker logs -f -t --tail 20  容器id : 实时查看后面20行
2. docker container exec -it 容器id /bin/bash  进入docker虚拟机,,然后可以在容器中执行shell命令. exit退出
3. docker inspect 容器id : 查看容器所有信息

四、docker实战 - 构建自己的镜像并运行spring boot项目
说明:spring boot 项目名叫demo,打成的jar包为demo-0.0.1-SNAPSHOT.jar,可以直接通过java -jar demo-0.0.1-SNAPSHOT.jar运行

1.建立demo文件夹,并将demo-0.0.1-SNAPSHOT.jar拷贝到demo文件夹下
2.在demo文件夹下新建Dockerfile文件并编写(Dockerfile文件即文件名为Dockerfile的文件)
以下是内容:

From java:8
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar /app.jar
EXPOSE 8083
ENTRYPOINT ["java" , "-jar", "/app.jar"]


Dockerfile详细解
From: 为指定基础镜像,并且必须是第一条指令。
VOLUME: 简单说配置宿主机和容器共享的目录, /tmp是容器中的目录,那宿主机的目录在哪里呢?使用docker inspect 命令找到Mounts,Source就是宿主机的目录.
    参考: https://www.cnblogs.com/51kata/p/5266626.html
          https://blog.csdn.net/dream_broken/article/details/52314993
ADD: 一个复制命令,把文件复制到镜像中
EXPOSE: 指定的端口(容器内端口)对本地宿主机公开
ENTRYPOINT: 容器启动时执行指令

2. 构建自己的镜像
进入demo文件夹,运行下面命令
docker build -t demo:0.1 .

-t: 指定镜像的名字.

demo:0.1, demo代表镜像名,0.1代表tag。
注意:
docker build命令后面有个".",代表当前目录,即在当前目录下执行。
通过docker images你可能会看到仓库名和tag都为<none>的镜像,原因我们一般定义image,都是使用Dockerfile,我们随时可能修改这个文件,然后重新使用docker build -t name . 命令来构建一个新的image。这种情况下,如果我们使用了和之前一样的镜像名来命名,那么docker会把这个名字赋给新的镜像,以前的镜像并不会被删除,但是此时它的名字被新的镜像剥夺了,就成为了一个无名镜像,也就是<none>:<none>出现的原因。这个none镜像会占用磁盘空间,所以我们必须删除它

3.新建容器并运行容器
docker run -d -p 8084:8081 demo:0.1

四、docker-compose 服务编排


1、是什么?
Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。
白话一点:相当于多个服务(容器)的启动工具


2、解决了什么?
用通俗的语言来说,我们平时操作 docker 还是很原始的一系列动作,你手动使用 docker 的动作可以拆分成


1) 找到一个系统镜像 // docker search
2) 安装好 vm 或者 virtual box // apt-get install docker
3) 在 vm 中安装镜像 // docker run -d -it 你的镜像
.......


这是最小的动作, 如果你要映射硬盘,设置nat网络或者桥接网络,等等…你就要做更多的 docker 操作, 这显然是非常没有效率的。
但是我们写在 docker-compose.file 里面就很好了。 你只需要写好后 只运行一句
docker-compose up -d
一切都是那么的简单


3、安装
自已去百度
验证安装:  docker-compose -v




4、如何使用docker-compose
使用Compose 基本上分为三步:
  1). 编写 Dockerfile 定义应用的运行环境
  2). 编写 docker-compose.yml 定义组成应用的各服务
  3). 执行 docker-compose up 启动整个应用
5、示例
使用docker-compose目录结构

docker
  docker-compose.yml
  demo
    Dockerfile
  nginx
    Dockerfile

nginx Dockerfile内容
 

FROM nginx
RUN echo '<div><center><h1><font color="red">Docker</font></h1><center><div><div><iframe src="http://www.baidu.com" width="100%" height="100%"><
/iframe></div>' > /usr/share/nginx/html/index.html

RUN : 运行指定的命令.详细:https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

docker-compose.yml 内容

demo:
  build:
    ./demo
  ports:
    - "8083:8083"
nginx:
  build:
    ./nginx
  ports:
    - "80:80"

建完后,执行docker-compose up即可,加-d代表在后台运行
docker-compose.yml文件详解:https://www.jianshu.com/p/2217cfed29d7

五、k8s
个人理解k8s是docker-compose的升级版本

六、参考资料
1、https://blog.csdn.net/qq_37788081/article/details/79044119
2、《循序渐近学Docker》
3、https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html
4、https://www.cnblogs.com/neptunemoon/p/6512121.html
5、https://www.cnblogs.com/ee900222/p/docker_5.html
6、https://blog.csdn.net/u014788227/article/details/52869801
7、《使用SpringCloud和Docker实战微服务》

5、spring boot demo git地址: https://gitee.com/kuguagua/spclouddemo

猜你喜欢

转载自blog.csdn.net/c364902709/article/details/80924690