QuickStart
1 | # 启动mysql5.7,并将D盘的mysql57/data/文件夹挂载到容器中作为mysql的数据保存位置 |
1. Docker的优点
更快的交付应用程序
应用程序和环境一起发布,使得开发、测试和运维之间避免了许多因环境导致的问题。
减少了许多环境搭建工作,软件开发更加迅速。
快速部署:Build,ship and Run Any App,Anywhere
部署和拓展更加容易
docker容器几乎可以在所有环境中运行,包括台式机、物理服务器、虚拟机、数据中心。
docker容器具备可移植性,能很方便地从本地的测试环境部署到云中。
docker容器仅具有秒级地启动时间,可以在需要时快速启动更多容器,在不再需要时关闭它们。
运行更多的负载
相对于虚拟机,docker更加轻量,同一台物理设备上可以运行更多的负载。
资源隔离
容器技术解决了不同应用之间的潜在依赖冲突问题。
2. Docker命令
- 构建镜像
1 | $ docker build -t provider:latest . |
- 搜索镜像
1 | $ docker search xxx |
- 运行容器
1 | $ docker run --name=test -it provider:latest -p 7998:7998 |
- 删除所有容器
1 | $ docker rm $(docker ps -aq) |
- 启动容器交互界面
1 | $ sudo docker run -t -i ID /bin/bash |
| docker run | 运行容器 |
|---|---|
| –name NAME | 为创建的容器命名 |
| -i | 保证容器的stdin是开启的 |
| -t | 为容器分配一个伪tty终端 |
| -v | 将宿主机的目录作为卷,挂在到容器里,-v src:dest,本地目录必须是绝对路径,且挂载的是目录 |
| –network | 指定新容器将会在哪个网络中运行 |
| -rm | 容器运行完毕后即删除 |
| -h | 指定容器的主机名 |
| ubuntu:xxx | 创建容器的镜像 |
| /bin/bash | 创建容器后执行的命令 |
3. Dockerfile
3.1 RUN
作用:在构建容器时运行的命令,常用于安装依赖,构造容器运行环境
1 | RUN ["可执行文件", "参数1", "参数2"] |
3.2 CMD
作用:类似于 RUN 指令,会被 docker run 附带的命令行参数覆盖
- CMD 在
docker run时运行。 - RUN 是在
docker build时运行。
1 | CMD <shell 命令> # CMD echo $PWD |
3.3 ENTRYPOINT
作用:类似于 CMD 指令,但不会被 docker run 的命令行参数指定的指令所覆盖。
1 | ENTRYPOINT ["<executeable>","<param1>","<param2>",...] |
示例:
1 | FROM nginx |
1、不传参运行
1 | $ docker run nginx:test |
容器内会将CMD拼接在ENTRYPOINT后面,默认运行以下命令:
1 | $ nginx -c /etc/nginx/nginx.conf |
2、传参运行
1 | $ docker run nginx:test -c /home/user/new.conf |
容器内会使用传入的参数替换掉CMD,运行一下命令:
1 | $ nginx -c /home/user/new.conf |
3.4 COPY
作用:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
1 | COPY <源路径1>... <目标路径> |
**<源路径>**:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
1 | COPY hom* /mydir/ |
**<目标路径>**:容器内的绝对路径表示,该路径不用事先建好,路径不存在的话,会自动创建。
3.5 ADD
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
3.6 ENV
设置环境变量,在后续的指令中,可以通过 $<key> 使用这个环境变量。
1 | # 格式1 |
以下示例设置 NODE_VERSION = 7.2.0 , 在后续的指令中可以通过 $NODE_VERSION 引用:
1 | ENV NODE_VERSION 7.2.0 |
3.7 ARG
作用:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
1 | ARG <参数名>[=<默认值>] |
3.8 WORKDIR
作用:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
1 | WORKDIR <工作目录路径> |
3.9 VOLUME
作用:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
1 | VOLUME ["<路径1>", "<路径2>"...] |
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
3.10 EXPOSE
作用:声明端口。
- 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
- 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
1 | EXPOSE <端口1> [<端口2>...] |
3.11 USER
作用:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
1 | USER <用户名>[:<用户组>] |