CentOS7下docker 主要命令总结(全)

里面的命令大多来自《Docker 技术入门与实践》这本书,用自己的话整理了一下。
这本书很适合初学者,里面除了这些命令以外还有实战案例和高级技巧,值得一读。

一、docker
1.安装:
yum install -y docker
2.启动
systemctl start docker.service
二、镜像
1.拉取镜像
#1.直接下载
docker pull <镜像名> 
#2.带版本
docker pull <镜像名> :<版本>
#3.选择其他服务器仓库下载,例从dl.dockerpool.com下载
docker pull d1.dockerpoll.com:5000/ubuntu
2.使用镜像创建容器
docker run -t -i <镜像名> /bin/bash
3.查看本机已有镜像信息
docker images
4.给镜像添加标签
docker tag <镜像名> <新镜像名:标签名>
5.查看镜像详细信息
#1.查看全部信息
docker inspect 775349758637
#2.查看其中一项信息,-f 指定
docker inspect -f {{".Architecture"}} 775349758637
6.搜寻镜像
docker search mysql
7.删除镜像
# 1.使用标签删除镜像 
    docker rmi docker.io/ubuntu
    # 当同一个镜像有多个标签时,docker rmi只是删除指定标签,并不影响镜像文件
    # 但镜像只剩一个标签时,就会彻底删除该镜像

# 2.使用id删除镜像
    docker rmi 775349758637
    # 当有该镜像创建的容器存在时,镜像无法被删除
    # 可以使用 -f 参数
    # docker rmi -f 775349758637
    # 但这样可能会有遗留问题,被删除的镜像换了新的id继续存在系统中
    # 正确做法是先删除容器,再删除镜像
8.创建镜像
# 有三种方法,基于已有镜像创建,基于本地模板导入,基于Dockerfile 创建(不属于命令,不介绍).基于已有镜像创建
主要使用docker commit命令mdocker commit [options] container [REPOSITORY[:TAG]]
主要选项包括 -a,--author="" 作者信息
              -m,-message="" 提交信息
              -p,--pause=true 提交时暂停容器运行

# 1.启动一个镜像,并在其中进行修改操作,例如创建一个新文件,然后退出
docker run -ti ubuntu:14.04 /bin/bash
touch test
exit
# 2.使用docker commit 命令来提交一个新的镜像,
# a4907d357644是容器id,会返回新创建的镜像id信息
docker commit -m "Added a new file " -a "Docker Newbee" a4907d357644 test
# 3.查看本地镜像列表,即可看到新创建的镜像
docker images

二.基于本地模板导入
从操作系统模板文件导入一个镜像,推荐使用OpenV提供的模板来创造,
 https://openvz.org/Download/template/precreated

cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
9.存出镜像
docker save -o <镜像包名(ubuntu_14.04.tar)> <镜像名(ubuntu:14.04)>
10.载入镜像
docker load --input <镜像包名(ubuntu_14.04.tar)>
11.上传镜像
docker push user/test:latest
docker push <镜像id/镜像名称>
三、容器
1.创建容器
docker create -it <镜像名:标签>
2.启动容器
# cea959ba3665 容器id ,通过docker ps -a可以查到
docker start <容器名称/容器id>
3.创建并启动容器
# 流程
# 1.检查本地是否存在指定的镜像,不存在就从公有仓库下载
# 2.利用镜像创建并启动一个容器
# 3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
# 4.从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
# 5.从地址池配置一个IP地址给容器
# 5.执行用户指定的应用程序
# 6.执行完毕后容器被终止
docker run ubuntu /bin/echo 'Hello world'
# 或
docker run -t -i -d  ubuntu:14.04 /bin/bash
#-t 表示分配伪终端, -i 让容器标准输入保持打开 -d表示以守护态运行
4.退出容器
exit
# 或
ctrl d
5.查看容器日志
docker logs -f --tail 1000 -t <容器名称/容器id>
6.终止容器
docker stop <容器名称/容器id>
7.查看终止状态的容器id
docker ps -a -q
8.重启容器
docker restart <容器名称/容器id>
9.进入容器
# attch命令,当多个窗口连接同一个容器的时候,所有窗口会同步
docker attach <容器名/容器id>
# exec 命令
docker exec -ti <容器名/容器id> /bin/bash
# nsenter 工具
# 太麻烦不介绍,有兴趣去网上搜
10.删除容器
docker rm <容器名/容器id>
# -f,--force=false 强行终止并删除一个运行中的容器
# -l,--link=false 删除容器的连接,当保留容器
# -v,--volumes=false 删除容器挂载的数据卷
11.导出容器
docker export <容器名/容器id> > <保存tar包名称>
docker export friendly_davinci > test.rar
12.导入容器,成为镜像
cat <tar包名> | docker import - <容器名>
cat test.rar |docker import - test:v1.0
四、仓库
1.Docker Hub
# 登录
docker login 
# 查找
docker search <镜像名>
# 下载
docker pull <镜像名>
# 推送
docker push <镜像名>
2.Docker Pool
# 拉取镜像前需要添加注册服务器的具体地址,dl.dockerpool.com:5000
docker pull dl.dockerpool.com:5000/ubuntu:12.04
3.私有仓库
#1.下载并启动一个registry 镜像,默认情况下会将仓库创建在容器的/tmp/registry 
# 目录下,可以通过-v 参数指定路径
	docker run -d -p 5000:5000  docker.io/registry
	# 或
	docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
#2.假设本机的ip地址是10.22.22.22
# 使用docker tag 命令将镜像标记位 10.22.22.22:55000/test
docker tag docker.io/ubuntu:14.04  10.22.22.22:5000/test
# docker push 上传标记的镜像
# 如果碰到报错“server gave HTTP response to HTTPS client”,需要修改/etc/docker/daemon.json文件,
# {
    "insecure-registries": [
        "10.22.22.22:5000"
    ]
}
# 然后重启docker 
# systemctl restart docker
docker push 10.22.22.22:5000/test
# 查看仓库里的镜像
curl http://10.22.22.22:5000/v2/_catalog
# 下载镜像,可以删除之后再下载,就知道成功没
docker pull 10.22.22.22:5000/test
五、数据管理
1.创建一个数据卷
# 1.在容器内创建一个数据卷
	# 使用 -v 标记可以创建一个数据卷,多次使用-v 可以创建多个
	# 下面使用 training/webapp 镜像创建一个web容器,并创建一个数据卷挂载到容器的 /webapp目录下
	docker run -d -P --name web -v /webapp training/webapp app.py
# 2.挂载一个主机目录作为数据卷
	# 加载主机的/src/webapp 目录到容器的 /opt/webapp 目录
	docker run -d -P --name web4 -v /src/webapp:/opt/webapp training/webapp python app.py
	# 默认权限是读写(rw),也可以通过ro指定为只读
	docker run -d -P --name web4 -v /src/webapp:/opt/webapp:ro training/webapp python app.py
# 3.挂载一个本地主机文件作为数据卷
	# -v 标记也可以从主机挂载单个文件到容器中作为数据卷
	# 挂载文件到容器,使用编辑工具(vi/sed --inplace等)时,可能会造成文件inode的改变,Docker1.1.0起
	# 会造成错误信息,所以推荐直接挂载文件所在目录
	docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
2.数据卷容器
#创建数据卷容器dbdata,并在气宗创建一个数据卷挂载到/dbdata
docker run -it -v /dbdata --name dbdata ubuntu
# 查看/dbdata目录
ls
# 然后,可以在其他容器中使用--volumes-from 来挂载dbdata 容器中的数据卷,例如创建db1和db2,
# 并从dbdata中挂载数据卷
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
# 删除挂载的容器不会删除数据卷,必须要在最后一个还挂载着它的容器显式使用docker rm -v 命令来指定同时删除
3.利用数据卷容器来迁移数据
# 1.备份
# 首先利用ubuntu 镜像创建了一个容器 worker。使用 --volumes-from dbdata参数来让worker 容器挂载的
# dbdata 容器的数据卷(即dbdata数据卷);使用-v $(pwd)/backup 参数来挂载本地的当前目录到
# worker容器的/backup目录。
# worker 容器启动后,使用tar cvf /backup/backup.tar /dbdata命令来将/dbdata 下的内容备份为
# 容器内的/backup/backup.tar ,即宿主主机当前目录下的backup.tar
docker run --volumes-from dbdata -v $(pwd):/backup \
--name worker ubuntu tar cvf /backup/backup.tar /dbdata
# 2.恢复
# 首先创建一个带有数据卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
# 然后创建另一个新的容器,挂载dbdata2的容器,并使用untar 解压备份文件到挂载的容器卷中即可
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar vxf /backup/backup.tar
六、网络基础配置
1.端口映射实现访问容器
# 使用 -P参数来指定端口映射,随机指定端口
docker run -d -P training/webapp python app.py
# 使用-p参数可以指定映射端口
	 # 映射所有接口地址
	 docker run -d -p 5000:5000 training/webapp python app.py
	 # 映射到指定地址的指定端口
	 docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
	 # 映射到指定地址的任意端口
	 	docker run -d -p 127.0.0.1:5000 training/webapp python app.py
	 	#或使用udp来标记端口
	 	docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
# 查看映射端口配置
docker port <容器名/容器id> <5000(可省略)>
2.容器互联实现容器间通信
# 自定义容器命名,使用 --name,容器名称唯一
	docker run -d -P --name <自定义名称> training/webapp python app.py
	# 验证命名
	docker ps -l
	# 也可以使用docker inspect 来查看容器的名字
	sudo docker inspect -f "{{.Name}}" <容器id/容器名>
	# 在执行docker run 的时候如果添加 --rm 标记,则容器会在终止后立刻删除,
	# 注意 --rm 和-d参数不能同时使用
# 容器互联,--link 参数
	# 创建一个新的数据库容器
	docker run -d --name db training/postgres
	# 创建一个web容器,并将它连接到db容器
	docker run -d -P --name web --link db:db training/webapp python app.py
	# 此时,db容器和web容器建立互联关系
	# --link 参数的格式为 --link name:alias 其中name是要连接的容器名,alias是别名
	#  docker ps 查看容器连接,会发现db容器的names列有db也有web/db,这表示web容器链接到db容器,
	# 这允许web容器访问 db容器的信息
	# docker 通过两种方式为容器公开信息,
	# 环境变量和更新/etc/hosts文件
七、使用Dockerfile创建镜像
1.基本结构
Dockerfile 由一行行命令语句组成,并且支持#开头的注释行
一般分为四部分:基础镜像信息,维护者信息、镜像操作指令和容器启动时执行指令
下面是示例

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format:Instruction [arguments/Command]

# 第一行必须指定基于的基础镜像
FROM ubuntu
# 维护者信息
MAINTAINER docker_user docker_user@email.com
# 镜像的操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe " >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
# 容器启动时执行指令
CMD /usr/sbin/nginx

2.指令
指令的一般格式为 INSTRUCTION arguments ,指令包括 FROM ,MAINTAINER,RUN 等
接下来分别介绍
1. FROM 
	格式为 FROM <image> 或 FROM<image>:<tag>
	第一条指令必须为FROM 指令。并且,如果在同一个Dockerfile中创建了多个镜像时,可以创建多个FROM指令。
	(每个镜像一次)
2.MAINTAINER
	格式为 MAINTAINER <name>,指定维护者信息
3.RUN
	格式为 RUN <command> 或RUN ["executable","param1","param2"]
	前者将在shell终端运行命令,/bin/sh -c;后者使用exec 执行。指定使用其他终端可以通过第二种方式实现
	例如RUN ["/bin/bash","-c","echo hello"]
	每条RUN指令可以在当前镜像基础下执行指定命令,并提交为新的镜像。命令可以用\换行
4.CMD
	支持三种格式
	CMD ["executable","param1","param2"] 使用exec执行,推荐方式
	CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用
	CMD ["param1","param2"] 提供给ENTRYPOINT 的默认参数
	指定启动容器时执行的命令,每个dockerfile只能由一条,多条只有最后一条被执行
	如果用户启动容器时候指定了运行的命令,那么CMD的命令会被覆盖
5.EXPOSE
	格式为EXPOSE <port> [<port>...]
	告诉Docker 服务器容器暴露的端口,启动容器时需要通过-P或-p来指定端口
6.ENV
	格式为ENV <key> <value> 。指定一个环境变量,会被后续RUN指令使用,并在容器运行时保持,例如
	ENV PG_MAJOR 9.3
7.ADD
	格式为ADD <src> <dest>
	该命令将复制指定的<src>到容器中的<dest>。其中<src>可以是Dockerfile所在目录的一个相对路径,
	也可以是一个URL,也可以是一个tar文件(自动解压)
8.COPY
	格式为COPY <src> <dest>
	复制本地主机的<src> (为Dockerfile所在目录的相对路径,文件或目录)为容器中的<dest> 。
	目标路径不存在时会自动创建
	当使用本地目录为源目录时,推荐使用COPY
9.ENTRYPOINT
	有两种格式
	ENTRYPOINT ["executable","param1","param2"]
	ENTRYPOINT command param1 param2 (shell 中执行)
10.VOLUME
	格式为VOLUME ["/data"]
	创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等
11.USER
	格式为USER deamon
	指定运行容器时用户名或UID,后续的RUN也会使用指定用户
	当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
	例如:RUN groupadd -r postgres && useradd -r -g postgres postgres ,要临时获取
	管理员权限可以用gosu,不推荐sudo
12.WORKDIR
	格式WORKDIR /path/to/workdir
	为后续的RUN、CMD、ENTRYPOINT 指令配置工作目录
	可以使用多个WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
	例如:
	WORKDIR /a
13.ONBUILD
	格式为ONBUILD [INSTRUCTION]
	配置当所创建的镜像作为其他新镜像的基础镜像时,所执行的操作指令。
	例如Dockerfile 使用如下的内容创建了镜像image-A
	ONBUILD ADD . /app/src
	ONBUILD RUN /usr/local/bin/python-build --dir /app/src
	
	如果基于image-A创建新的镜像时,新的Dockerfile 使用FROM image-A指定基础镜像时,
	会自动执行ONBUILD指令,等价于在后面添加了两条指令
	FORM image-A
	# Automatically run the following
	ONBUILD ADD . /app/src
	ONBUILD RUN /usr/local/bin/python-build --dir /app/src
	使用ONBUILD指令的镜像,推荐在标签中注明,例如ruby:1.9-onbuild
创建镜像
docker build 
# 要指定镜像的标签信息,可以通过-t选项
docker build -t bild_repo/first_image /tmp/docker_builder

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值