docker常用命令
1. 安装
ubuntu 14.04 or later
sudo apt-get update
sudo apt-get install -y docker.io
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
or通过官方源安装最新版本
2. 获取镜像
从网络上获取镜像,如果TAG未指定,则默认为latest标签。
docker pull NAME[:TAG]
docker run -it ubuntu /bin/bash 进入容器
3. 查看本机镜像信息
docker images
通过docker tag
命令添加新的标签。
使用docker inspect
命令获取镜像详细信息。
4. 搜索镜像
docker search TERM
5. 删除镜像
docker rmi IMAGE [IMAGE...]
IMAGE可以为标签或者ID。
当某个镜像有多标签时,通过标签删除时只是删除了指定的标签,docker依然存在。
6. 创建镜像
三种方法:基于已有镜像的容器创建、基于本地模板导入、基于DockerFile创建。
基于已有镜像的容器创建
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a 作者信息
-m 提交消息
-p 提交时暂停容器运行
基于本地模板导入
暂无
基于DockerFile
DockerFile 分为四部分:基础镜像信息,维护者信息,镜像操作指令、镜像启动时执行指令
FROM ubuntu
MAINTAINER docker_user docker_user@eamil.com
RUN echo 'hello docker'
RUN apt-get update
RUN apt-get install -y nginx
CMD /usr/sbin/nginx
指令:
FROM
FROM <image>
或FROM <image>:<tag>
MAINTAINER
MAINTAINER <name>
RUN
RUN COMMAND
或RUN ["executable", "param1", "param2"]
前者为/bin/sh -c
,后者使用exec
执行,例如["/bin/bash", "-c", "echo hello"]
CMD
指定启动容器时的命令,三种格式CMD ["executable", "param1", "param2"]
,推荐方式CMD COMMAND param1 param2
,在/bin/sh执行CMD ["param1", "param2"]
,提供给ENTRYPOINT的默认参数EXPOSE
暴露container的端口给主机。
EXPOSE <port> [<port>...]
ENV
指定一个环境变量,格式:ENV <key> <value>
ADD
复制指定的<src>
到容器中的<dest>
,<src>
可以是Dockerfile所在目录的一个相对路径,也可以是URL,也可以是一个tar文件。
ADD <src> <dest>
COPY
COPY <src> <dest>
,复制本地的src到容器中dest。ENTRYPOINT
配置容器启动后执行的命令,不可被docker run提供的参数覆盖。每个dockerfile只能有一个ENTRYPOINT,如果指定多个,只有最后一个生效。
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1, param2
VOLUME
VOLUME ["/data"]
USER
USER daemon
指定运行容器的用户名或UID,后续的RUN使用指定的用户。WORKDIR
WORKDIR /path/to/workdir
为后续的RUN,CMD,ENTRYPOINT指令配置工作目录。
可以使用多个WORKDIR指令,如果后续的是相对路径,则会基于之前命令指定的路径。ONBUILD
ONBUILD [INSTRUCTION]
配置当所创建的镜像作为其他新创建镜像的基础镜像时,所执行的操作指令。
7. 数据管理
数据卷、数据卷容器
数据卷
挂载主机目录作为数据卷
docker run -v HOST-PATH:CONTAINER-PATH[:PERMISSION]
docker run -v /tmp:/mnt/tmp:ro
ro表示read only,不加的情况默认为rw
挂载主机文件作为数据卷
docker run -v ~/.bash_history:.bash_history
数据卷容器
数据卷容器就是一个普通的容器
# 创建一个数据卷容器dbdata
docker run -it -v /dbdata --name dbdata ubuntu
# 创建db1和db2两个容器,并从dbdata容器挂载数据卷
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
8. 网络基础配置
端口映射实现访问容器
# -P参数随机映射一个49000~49900的端口至容器内部开放的网络端口
docker run -P
# 用docker port查看端口映射情况。
# -p指定映射端口,一个指定端口上只能绑定一个容器
docker run -p ip:hostPort:containerPort
# 将容器内的5000端口映射到主机的9000端口
docker run -p 9000:5000
# 映射到指定地址的任意端口,主机会自动分配端口对应到container中的端口
docker run -p 127.0.0.1::5000
# 可以使用udp选项标记udp端口
docker run -p 127.0.0.1:5000:5000/udp
容器互联实现容器间通信
# 创建一个新的数据库容器
docker run --name db training/postgres
# 创建新的web容器,并连接到db容器
docker run -d -P --name web --link db:db training/webapp
# --link的格式为--link name:alias,name是要连接容器的名称,alias是这个连接的别名