docker初识和基本命令
docker简介
从上图可以看到客户端通过命令方式,跟docker主机的守护程序交互,操作Docker镜像,Docker容器是由Docker镜像创建的运行实例。最后可从Docker仓库上传或下载Docker镜像
-
相关术语
English 中文 host 宿主机 image 镜像 container 容器 registry 仓库 daemon 守护程序 client 客户端
下载并安装
-
下载地址 docker for windows
-
安装完成重启电脑
-
启动docker for windows,命令行中执行
docker version
,出现下面信息标识docker安装成功C:\Users\haorongzhi>docker version
Client: Docker Engine - Community
Cloud integration: 1.0.2
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:00:27 2020
OS/Arch: windows/amd64
Experimental: falseServer: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker常用命令及相关参数解析
-
登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker login [OPTIONS] [SERVER] -u :登陆的用户名 -p :登陆的密码 #例子 默认是docker hub仓库 docker login -u 用户名 -p 密码
-
登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout [OPTIONS] [SERVER] docker logout
-
镜像操作
-
获取当前所有镜像
docker image ls #或 docker images
C:\Users\haorongzhi>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine/git latest 76a4083eacef 5 days ago 28.4MBREPOSITORY:镜像所在的仓库名称;
TAG:镜像标签
IMAGEID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
-
查询镜像
docker search [OPTIONS] 镜像名称 #可选参数 --automated :只列出 automated build类型的镜像; --no-trunc :显示完整的镜像描述; -s :列出收藏数不小于指定值的镜像。
#查询start数不小于1000的mysql镜像
C:\Users\haorongzhi>docker search -s 1000 mysql
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10202 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3753 [OK] -
拉取镜像
# 官方镜像 docker image pull 镜像名称:TAG # 或简写为 docker pull 镜像名称:TAG #:TAG 可不加 默认拉取latest标签 # 个人镜像 docker pull 仓库名称/镜像名称 # 第三方仓库 docker pull 第三方仓库地址/仓库名称/镜像名称 docker pull hub.c.163.com/library/mysql:latest #(默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)
C:\Users\haorongzhi>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
da7391352a9b: Pull complete
14428a6d4bcd: Pull complete
2c2d948710f2: Pull complete
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest -
删除镜像
docker image rm 镜像名或镜像ID #或 docker rmi 镜像名或镜像ID
问题:
Error response from daemon: conflict: unable to remove repository reference “alpine/git” (must force) - container db4643e78770 is using its referenced image 76a4083eacef
有使用该镜像的容器,首先删除容器。(查看容器操作命令)
C:\Users\haorongzhi>docker rmi alpine/git
Untagged: alpine/git:latest
Untagged: alpine/git@sha256:f3a0a5f4b156e34708a9315b175f1bc7c54e7fb913a2d068c438859e92ac408a
Deleted: sha256:76a4083eacef13b245bfd9039b263d351f8f5214a76a21bc5d2c8df32d4e6562
Deleted: sha256:5341ce7ea6339047c033ee79b5389fc38a6f547c382fc476d08d5a0399cc8195
Deleted: sha256:154ea97b5937e06768f6b3147840c8747e37c90ae3d07cf7b7bb967bb2db99df
Deleted: sha256:ace0eda3e3be35a979cec764a3321b4c7d0b9e4bb3094d20d3ff6782961a8d54 -
上传镜像
docker push 第三方仓库地址/仓库名称/镜像名称:TAG
-
※加载镜像 运行容器
docker run [可选参数] 镜像名 [向启动容器中传入的命令]
常用可选参数 作用 -i 表示以《交互模式》运行容器。 -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 –name 为创建的容器命名。(默认会随机给名字,不支持中文字符!!!) -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 -p 表示端口映射,即宿主机端口:容器中端口。 比如: -p 8080:80
就是将容器中的80端口,映射到主机中的8080端口–network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。 C:\Users\haorongzhi>docker run -d -p 8080:80 --name hrzfirststart docker/getting-started
Unable to find image ‘docker/getting-started:latest’ locally
latest: Pulling from docker/getting-started
188c0c94c7c5: Pull complete
61c2c0635c35: Pull complete
378d0a9d4d5f: Pull complete
2fe865f77305: Pull complete
b92535839843: Pull complete
ebe280ac36f4: Pull complete
b7beeb601852: Pull complete
Digest: sha256:7434aacfacb3c2d7d49f013e8a8092fde022c8b9f058b7fae7077e9cad1edc99
Status: Downloaded newer image for docker/getting-started:latest
908df6a58f4f0855f55c622a08d47d7246e459d60bf646324803dedc656d8aff打开http://localhost:8080/ 即可打开页面
-
TAG 标记镜像
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] #例如 docker tag ubuntu:15.10 runoob/ubuntu:v3
-
-
容器操作
-
查看容器
# 查看当前所有正在运行的容器 docker ps # 查看当前所有的容器 docker ps -a # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等) docker ps -f name=指定的名字 # 显示2个上次创建的容器(2可以改变) docker ps -n 2 # 显示最新创建的容器(包括所有状态) docker ps -l # 仅显示ip docker ps -q # 显示容器大小 docker ps -s
C:\Users\haorongzhi>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
908df6a58f4f docker/getting-started “/docker-entrypoint.…” 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp hrzfirststart标签 含义 CONTAINER ID 镜像ID IMAGE 创建容器的镜像名称 COMMAND 默认启动命令(启动时会自动执行) CREATED 创建容器的日期 STATUS 当前的状态(启动了多久,多久之前退出等) PORTS 映射的端口 NAMES 容器的名称 SIZE 容器大小(使用-s命令参数时才能看到) -
启动和关闭容器
# 停止容器 docker container stop 容器名或容器id # 或可简写为 docker stop 容器名或容器id # 强制关闭容器 docker container kill 容器名或容器id # 或可简写为 docker kill 容器名或容器id # 启动容器 docker container start 容器名或容器id # 或可简写为 docker start 容器名或容器id
C:\Users\haorongzhi>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
908df6a58f4f docker/getting-started “/docker-entrypoint.…” 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp hrzfirststartC:\Users\haorongzhi>docker stop 908df6a58f4f
908df6a58f4fC:\Users\haorongzhi>docker start 908df6a58f4f
908df6a58f4f -
操作后台容器
# 如果我只需要执行简单的一两条命令可以使用docker exec # 执行单条命令 (-i: 启动并且保留交互式命令行; -t:作用是分配一个虚拟的终端; docker run ) docker exec -it 容器名或容器id 执行的命令 # 比如 docker exec -it kali-test whoami # 用这种方法,我们还可以启动命令行,根据Linux的特性,系统程序会在/bin中,linux中常用的Shell有多个,其中大部分用的Linux默认的为bash # 所以我们启动命令可以自行如下命令(除了/bin/bash外,linux一般还会带/bin/sh、/bin/rbash、/bin/dash等,具体区别可以自行百度) docker exec -it 容器名或容器id /bin/bash # 比如 docker exec -it kali-test /bin/bash # 除了exec外还有attach可以使用,但它有个弊端,多终端启动attach后,都会会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。 docker attach 容器名或容器id # 比如 docker attach kali-test
exec可选参数 作用 -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。 -e 设置环境变量 -i 表示以《交互模式》运行容器。 -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 -u 设置用户名和UID。 -w 设置容器内的工作目录。 -
删除容器
# 使用rm删除容器 docker rm 容器名或容器id
-
容器制作为镜像
# 将容器制作成镜像 docker commit [OPTIONS] 容器名/容器id 镜像名称 # 镜像打包备份(打包备份的文件会自动存放在当前命令行的路径下,如果想让保存的文件可以打开,可以加.tar后缀) #例如 docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 docker save -o 保存的文件名 镜像名 # 镜像解压 docker load -i 文件路径/备份文件
参数 作用 -a 提交的镜像作者; -c 使用Dockerfile指令来创建镜像; -m 提交时的说明文字; -p 在commit时,将容器暂停。 C:\Users\haorongzhi>docker commit 908df6a58f4f hrztestimage
sha256:fa0876e299a2311ffbeb999325e4e9f446cfe475b37492e91a973a975c25d0efC:\Users\haorongzhi>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hrztestimage latest fa0876e299a2 9 seconds ago 27.2MB
ubuntu latest f643c72bc252 8 hours ago 72.9MB
docker/getting-started latest 67a3629d4d71 3 weeks ago 27.2MB -
容器和宿主机进行文件拷贝
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH -L :保持源目标中的链接 #例 docker cp /www/runoob 96f7f14e99ab:/www/
-
Dokerfile说明和使用
-
文件说明和构建说明
Dockerfile是一个包含用于组合镜像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取
Dockerfile
中的指令自动生成镜像。Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
docker build
命令用于从Dockerfile构建镜像。可以在docker build
命令中使用-f
标志指向文件系统中任何位置的Dockerfile。例:
docker build -f /path/to/a/Dockerfile
-
常用指令
指令 说明 FROM 设置镜像使用的基础镜像 MAINTAINER 镜像的作者 RUN 编译镜像时运行的脚本 CMD 设置容器的启动命令 LABLE 镜像的标签 EXPOSE 镜像暴露的端口 ENV 容器的环境变量 ADD 编译镜像时复制文件到镜像中 COPY 编译镜像时复制文件到镜像中 ENTRYPPOINT 设置容器的入口程序 VOLUME 设置容器的挂载卷 USER 设置运行RUN CMD ENTRYPOINT的用户名 WORKDIR 设置RUN CMD ENTRYPOINT COPY ADD指令的工作目录 ARG 设置编译镜像时加入的参数 ONBUILD 设置镜像的ONBUILD指令 STOPSIGNAL 设置容器的退出信号量 #示例 FROM openjdk:8-jre-buster #声明维护任人员的联系方式 LABEL maintainer="haorongzhi" #jar文件路径 相当于CD WORKDIR /myserver #添加jar文件到该目录 ADD myjar.jar . #预制环境变量 ENV JAVA_OPTS ="" #暴露服务端口 EXPOSE 8080 #挂载外部目录 VOLUME /temp #程序启动命令 ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar /myserver/myjar.jar"]
-
常用指令说明 参考Docker实战-编写Dockerfile
-
FROM
语法:FROM < image>[:< tag> | @< digest>]
#例子FROM mysql:5.6
注意:如果忽略tag选项,会使用latest镜像
-
MAINTAINER
语法:MAINTAINER < name>
-
RUN
语法: RUN < command>
RUN [“executable”,”param1”,”param2”]
提示:RUN指令会生成容器,在容器中执行脚本,容器使用当前镜像,脚本指令完成后,Docker Daemon会将该容器提交为一个中间镜像,供后面的指令使用
补充:RUN指令第一种方式为shell方式,使用/bin/sh -c < command>运行脚本,可以在其中使用\将脚本分为多行
RUN指令第二种方式为exec方式,镜像中没有/bin/sh或者要使用其他shell时使用该方式,其不会调用shell命令
例子:RUN source $HOME/.bashrc;
echo $HOME RUN [“/bin/bash”,”-c”,”echo hello”]
RUN [“sh”,”-c”,”echo”,”$HOME”] 使用第二种方式调用shell读取环境变量
-
CMD
语法:CMD [“executable”,”param1”,”param2”]
CMD [“param1”,”param2”]
CMD < command>
提示:CMD第一种、第三种方式和RUN类似,第二种方式为ENTRYPOINT参数方式,为entrypoint提供参数列表
注意:Dockerfile中只能有一条CMD命令,如果写了多条则最后一条生效 -
LABEL
格式:LABEL < key>=< value> < key>=< value> …
提示:不同标签之间通过空格隔开
注意:每条指令都会生成一个镜像层,Docker中镜像最多只能有127层,如果超出Docker Daemon就会报错,如LABEL …=… <假装这里有个换行> LABEL …=…合在一起用空格分隔就可以减少镜像层数量,同样,可以使用连接符\将脚本分为多行
镜像会继承基础镜像中的标签,如果存在同名标签则会覆盖 -
EXPOSE
语法:EXPOSE < port> < port> …
延伸:镜像暴露端口可以通过docker inspect查看
提示:容器启动时,Docker Daemon会扫描镜像中暴露的端口,如果加入-P参数,Docker Daemon会把镜像中所有暴露端口导出,并为每个暴露端口分配一个随机的主机端口(暴露端口是容器监听端口,主机端口为外部访问容器的端口)
注意:EXPOSE只设置暴露端口并不导出端口,只有启动容器时使用-P/-p才导出端口,这个时候才能通过外部访问容器提供的服务 -
ENV
语法:ENV < key>=< value>…|< key> < value>
注意:环境变量在整个编译周期都有效,第一种方式可设置多个环境变量,第二种方式只设置一个环境变量
提示:通过${变量名}或者 变 量 名 使 用 变 量 , 使 用 方 式 变量名使用变量,使用方式 变量名使用变量,使用方式{变量名}时可以用${变量名:-default} ${变量名:+cover}设定默认值或者覆盖值
ENV设置的变量值在整个编译过程中总是保持不变的 -
ADD
语法:ADD < src>… < dest>|[“< src>”,… “< dest>”]
注意:当路径中有空格时,需要使用第二种方式
当src为文件或目录时,Docker Daemon会从编译目录寻找这些文件或目录,而dest为镜像中的绝对路径或者相对于WORKDIR的路径
提示:src为目录时,复制目录中所有内容,包括文件系统的元数据,但不包括目录本身
src为压缩文件,并且压缩方式为gzip,bzip2或xz时,指令会将其解压为目录
如果src为文件,则复制文件和元数据
如果dest不存在,指令会自动创建dest和缺失的上级目录 -
COPY
语法:COPY < src>… < dest>|[“< src>”,… “< dest>”]
提示:指令逻辑和ADD十分相似,同样Docker Daemon会从编译目录寻找文件或目录,dest为镜像中的绝对路径或者相对于WORKDIR的路径 -
ENTRYPOINT
语法:ENTRYPOINT [“executable”,”param1”,”param2”]
ENTRYPOINT command param1 param2(shell方式)
提示:入口程序是容器启动时执行的程序,docker run中最后的命令将作为参数传递给入口程序
入口程序有两种格式:exec、shell,其中shell使用/bin/sh -c
运行入口程序,此时入口程序不能接收信号量
当Dockerfile有多条ENTRYPOINT时只有最后的ENTRYPOINT指令生效
如果使用脚本作为入口程序,需要保证脚本的最后一个程序能够接收信号量,可以在脚本最后使用exec或gosu启动传入脚本的命令
注意:通过shell方式启动入口程序时,会忽略CMD指令和docker run中的参数
为了保证容器能够接受docker stop发送的信号量,需要通过exec启动程序;如果没有加入exec命令,则在启动容器时容器会出现两个进程,并且使用docker stop命令容器无法正常退出(无法接受SIGTERM信号),超时后docker stop发送SIGKILL,强制停止容器
例子:FROM ubuntu <换行> ENTRYPOINT exec top -b -
VOLUME
语法:VOLUME [“/data”]
VOLUME /data1 /data2
提示:启动容器时,Docker Daemon会新建挂载点,并用镜像中的数据初始化挂载点,可以将主机目录或数据卷容器挂载到这些挂载点 -
USER
语法:USER < name>
-
WORKDIR
语法:WORKDIR < Path>
提示:如果工作目录不存在,则Docker Daemon会自动创建
Dockerfile中多个地方都可以调用WORKDIR,如果后面跟的是相对位置,则会跟在上条WORKDIR指定路径后(如WORKDIR /A WORKDIR B WORKDIR C,最终路径为/A/B/C) -
ARG
语法:ARG < name>[=< defaultValue>]
注意:ARG从定义它的地方开始生效而不是调用的地方,在ARG之前调用编译变量总为空,在编译镜像时,可以通过docker build –build-arg < var>=< value>设置变量,如果var没有通过ARG定义则Daemon会报错
可以使用ENV或ARG设置RUN使用的变量,如果同名则ENV定义的值会覆盖ARG定义的值,与ENV不同,ARG的变量值在编译过程中是可变的,会对比使用编译缓存造成影响(ARG值不同则编译过程也不同)
例子:ARG CONT_IMAG_VER <换行> RUN echo $CONT_IMG_VER
ARG CONT_IMAG_VER <换行> RUN echo hello
当编译时给ARG变量赋值hello,则两个Dockerfile可以使用相同的中间镜像,如果不为hello,则不能使用同一个中间镜像 -
ONBUILD
语法:ONBUILD [INSTRUCTION]
提示:从该镜像生成子镜像,在子镜像的编译过程中,首先会执行父镜像中的ONBUILD指令,所有编译指令都可以成为钩子指令 -
STOPSIGNAL
语法:STOPSIGNAL signal
提示:信号量可以是数字或者信号量的名字,如9或者SIGKILL,信号量的数字说明在Linux系统管理中有简单介绍
-
-
常见问题解析
(待续。。。)
docker-compose 容器编排
-
说明
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
Compose 使用的三个步骤:
- 使用 Dockerfile 定义应用程序的环境。
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序。
-
docker-compose.yml
常用参数
命令 说明 build 本地创建镜像 command 覆盖缺省命令 depends_on 连接容器 volumes 卷 image pull镜像 #示例 version: '3' services: # Nginx负载均衡服务 chat-nginx: image: nginx:stable ports: - 80:80 volumes: - ./conf.d:/etc/nginx/conf.d # 应用服务器 - 1 chat-server-1: image: 镜像名 environment: - SPRING_DATASOURCE_URL=jdbc:postgresql:chat-postgres/chat - SPRING_DATASOURCE_USERNAME=postgres - SPRING_DATASOURCE_PASSWORD=Test6530 - SPRING_REDIS_HOST=chat-redis ports: - 8080:8080 # 应用服务器 - 2 chat-server-2: image: 镜像名 environment: - SPRING_DATASOURCE_URL=jdbc:postgresql:chat-postgres/chat - SPRING_DATASOURCE_USERNAME=postgres - SPRING_DATASOURCE_PASSWORD=Test6530 - SPRING_REDIS_HOST=chat-redis ports: - 8081:8081 # 数据库服务器 chat-postgres: image: 镜像名 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=Test6530 volume: - chat-postgres:/var/lib/postgresql/data ports: - 5432:5432 # 缓存服务器 chat-redis: image: redis:5 ports: - 6379:6379 volumes: chat-postgres:
-
参数说明
-
image
image是指定服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
services: web: image: hello-world
-
build
服务除了可以基于指定的镜像,还可以基于一份Dockerfile,在使用up启动时执行构建任务,构建标签是build,可以指定Dockerfile所在文件夹的路径。Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
build: /path/to/build/dir #设定上下文根目录,然后以该目录为准指定Dockerfile build: context: ../ dockerfile: path/of/Dockerfile
-
context
ontext选项可以是Dockerfile的文件路径,也可以是到链接到git仓库的url,当提供的值是相对路径时,被解析为相对于撰写文件的路径,此目录也是发送到Docker守护进程的context
-
dockerfile
使用dockerfile文件来构建,必须指定构建路径
-
commond
使用command可以覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
-
container_name
Compose的容器名称格式是:<项目名称><服务名称><序号>
可以自定义项目名称、服务名称,但如果想完全控制容器的命名,可以使用标签指定:container_name: app
-
depends_on
在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题
version: '2' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
-
pid
pid: "host"
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用pid标签将能够访问和操纵其他容器和宿主机的名称空间 -
ports
ports用于映射端口的标签。
使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口ports: - "3000" - "8000:8000" - "127.0.0.1:8001:8001"
-
extra_hosts
添加主机名的标签,会在/etc/hosts文件中添加一些记录。
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
-
volumes
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]格式,或者使用[HOST:CONTAINER:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。
Compose的数据卷指定路径可以是相对路径,使用 . 或者 … 来指定相对目录。
数据卷的格式可以是下面多种形式volumes: // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。 - /var/lib/mysql // 使用绝对路径挂载数据卷 - /opt/data:/var/lib/mysql // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。 - ./cache:/tmp/cache // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。 - ~/configs:/etc/configs/:ro // 已经存在的命名的数据卷。 - datavolume:/var/lib/mysql
-
volumes_from
从另一个服务或容器挂载其数据卷:
volumes_from: - service_name - container_name
-
dns
自定义DNS服务器。可以是一个值,也可以是一个列表。
dns:8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
-
expose
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数,如下所示:
expose: - "3000" - "8000"
-
links
链接到其它服务中的容器。使用服务名称(同时作为别名),或者“服务名称:服务别名”(如 SERVICE:ALIAS),例如:
links: - db - db:database - redis
-
net
设置网络模式。
net: "bridge" net: "none" net: "host"
-
-
docker compose命令
-
常用命令
参数 说明 up 启动服务 stop 停止服务 rm 删除服务器中的各个容器 logs 观察各个容器的日志 ps 列出服务相关的容器 -
命令格式 参照Docker入门之docker-compose
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
-f --file FILE指定Compose模板文件,默认为docker-compose.yml -p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名 --verbose 输出更多调试信息 -v,-version 打印版本并退出 --log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
-
docker -compose up
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...] 选项包括: -d 在后台运行服务容器 -no-color 不是有颜色来区分不同的服务的控制输出 -no-deps 不启动服务所链接的容器 --force-recreate 强制重新创建容器,不能与-no-recreate同时使用 –no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用 –no-build 不自动构建缺失的服务镜像 –build 在启动容器前构建服务镜像 –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) –remove-orphans 删除服务中没有在compose文件中定义的容器
-
docker-compose ps
docker-compose ps [options] [SERVICE...] 列出项目中所有的容器
-
docker-compose stop
docker-compose stop [options] [SERVICE...] 选项包括 -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒) docker-compose stop 停止正在运行的容器,可以通过docker-compose start 再次启动
-
dokcer-compose -h 查看帮助
-
docker-compose down
docker-compose down [options] 停止和删除容器、网络、卷、镜像。 选项包括: –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像 -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷 –remove-orphans,删除服务中没有在compose中定义的容器 docker-compose down 停用移除所有容器以及网络相关
-
docker-compose logs
docker-compose logs [options] [SERVICE...] 查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。 docker-compose logs 查看服务容器的输出 -f 跟踪日志输出
-
docker-compose build
docker-compose build [options] [--build-arg key=val...] [SERVICE...] 构建(重新构建)项目中的服务容器。 选项包括: –compress 通过gzip压缩构建上下环境 –force-rm删除构建过程中的临时容器 –no-cache 构建镜像过程中不使用缓存 –pull 始终尝试通过拉取操作来获取更新版本的镜像 -m, –memory MEM为构建的容器设置内存大小 –build-arg key=val为服务设置build-time变量 服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务
-
docker-compose pull
docker-compose pull [options] [SERVICE...] 拉取服务依赖的镜像。 选项包括: –ignore-pull-failures,忽略拉取镜像过程中的错误 –parallel,多个镜像同时拉取 –quiet,拉取镜像过程中不打印进度信息 docker-compose pull 拉取服务依赖的镜像
-
docker-compose restart
docker-compose restart [options] [SERVICE...] 重启项目中的服务。 选项包括: -t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒) docker-compose restart 重启项目中的服务
-
docker-compose rm
docker-compose rm [options] [SERVICE...] 删除所有(停止状态的)服务容器。 选项包括: –f, –force,强制直接删除,包括非停止状态的容器 -v,删除容器所挂载的数据卷 docker-compose rm 删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
-
docker-compose start
docker-compose start [SERVICE...] docker-compose start 启动已经存在的服务容器。
-
docker-compose run
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...] 在指定服务上执行一个命令。 docker-compose run ubuntu ping www.baidu.com 在指定容器上执行一个ping命令。
-
docker-compose scale
docker-compose scale web=3 db=2 设置指定服务运行的容器个数。通过service=num的参数来设置数量
-
docker-compose pause
docker-compose pause [SERVICE...] 暂停一个服务容器
-
docker-compose kill
docker-compose kill [options] [SERVICE...] 通过发送SIGKILL信号来强制停止服务容器。 支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号: docker-compose kill -s SIGINT
-
docker-compose config
docker-compose config [options] 验证并查看compose文件配置。 选项包括: –resolve-image-digests 将镜像标签标记为摘要 -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息 –services 打印服务名,一行一个 –volumes 打印数据卷名,一行一个
-
docker-compose create
docker-compose create [options] [SERVICE...] 为服务创建容器。 选项包括: –force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数 –no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数 –no-build:不创建镜像,即使缺失 –build:创建容器前,生成镜像
-
docker-compose exec
docker-compose exec [options] SERVICE COMMAND [ARGS...] 选项包括: -d 分离模式,后台运行命令。 –privileged 获取特权。 –user USER 指定运行的用户。 -T 禁用分配TTY,默认docker-compose exec分配TTY。 –index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash,web服务中包含多个容器
-
docker-compose port
docker-compose port [options] SERVICE PRIVATE_PORT 显示某个容器端口所映射的公共端口。 选项包括: –protocol=proto,指定端口协议,TCP(默认值)或者UDP –index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
-
docker-compose push
docker-compose push [options] [SERVICE...] 推送服务的镜像。 选项包括: –ignore-push-failures 忽略推送镜像过程中的错误
-
docker-compose stop
docker-compose stop [options] [SERVICE...] 停止运行的容器
-
docker-compose uppause
docker-compose unpause [SERVICE...] 恢复处于暂停状态中的服务。
-