一、查看Docker基本信息
1.查看docker版本
docker version
2.查看docker系统信息
docker info
二、docker container
docker container 指令可省去container
1.连接到容器,不建议使用,原因如下
(1)使用attach访问容器,退出时会使容器退出运行
(2)多个终端同时使用attach实际上是镜像的
docker container attach <容器ID or 容器名>
2.访问正在运行的容器,且不干扰正在运行的服务
docker container exec -it <容器ID or 容器名> /bin/bash
3.将容器保存为新的镜像,参数有
-a 提交镜像的作者
-c 使用Dockerfile指令来创建镜像
-m 提交时的说明文字
-p 在commit时,将容器暂停
docker container commit <容器ID or 容器名> [ImageName]:[Version]
docker container commit -a 'mycon' a555yuc173er nginx:v0.1
4.创建容器
docker container create <镜像名:tag or 镜像ID>
5.检查容器里文件结构更改
docker diff <容器ID or 容器名>
6.查看容器详细信息,-f为可选参数,用于查看信息中指定值
docker container inspect <容器ID or 容器名>
docker container inspect -f='{{.State.Pid}} {{.Id}}' <容器ID or 容器名>
7.查看容器中运行的进程
docker container top <容器ID or 容器名>
8.重命名容器
docker container rename 原容器名称 新容器名称
9.列出所有容器
docker container ls -a
10.为一个或多个更新容器配置文件
# 将cpu升级为2核,更多配置参数详见官方文档
docker container update test --cpus 2
11.启动、暂停容器
docker container start <容器ID or 容器名>
docker container stop <容器ID or 容器名>
docker pause <容器ID or 容器名>
docker unpause <容器ID or 容器名>
# 交互式容器
docker container run -it --name "NAME" <镜像ID or 镜像名:tag> /bin/bash
# 守护式容器
docker container run -d -p 8080:80 --name "NAME" <镜像ID or 镜像名:tag>
11.删除容器
docker container rm <容器ID or 容器名>
# 删除所有容器
docker container rm `docker ps -a -q`
12.阻塞运行直到容器停止,然后打印出它的退出代码
docker wait <容器ID or 容器名>
13.删除所有停止运行的容器
docker container prune
三、docker images
1.列出所有镜像
# 加-a参数可以显示出Dockfile编译时的中间层镜像
docker image ls -a
docker images
2.删除所有镜像
docker image rm `docker image ls -a`
docker rmi $(docker image ls -a)
3.保存、恢复镜像
docker save <容器ID or 容器名> -o a.tar
docker save <容器ID or 容器名> > a.tar
docker load -i a.tar
docker load < a.tar
4.查看镜像详细信息
docker image inspect <镜像ID or 镜像名:tag>
5.移除所有未使用的镜像
# 删除所有未被 tag 标记和未被容器使用的镜像:
docker image prune
# 删除所有未被容器使用的镜像
docker image prune -a
6.下载\上传镜像
docker pull centos:latest
docker push 10.10.10.10/test/centos:latest
7.标记本地镜像,将其归入某一仓库
docker image tag ubuntu:18.10 lol/ubuntu:v3
四、Docker Volume
Docker Volume有两种方式
- bind mount 手动指定目录,目录需从根目录开始,不具备可移植性
- volume Docker管理,位于/var/lib/docker/volumes
以下是volume挂载实例
# 自动创建的onevolume位于/var/lib/docker/volumes
docker run -it -v onevolume:/mydata centos /bin/bash
#匿名挂载,目录随机生成
docker run -it -v /mydata centos /bin/bash
# 手动创建数据卷
docker volume create twovolume
docker run -it -v twovolume:/mydata centos /bin/bash
以下是bind mount模式挂载实例
# host目录需从根目录开始、由于windows、linux系统结构不同,不具备移植性
docker run -it -v $(pwd)/data:/condata centos /bin/bash
tips:容器可以通过–volume-from参数挂载数据卷容器
tips: Dockerfile中可以通过VOLUME /dic来申明数据卷
五、docker network
Docker有四种默认网络模式:
- host模式 共用宿主机的端口和网络
- container模式 创建的容器不会创建自己的网卡,而是和指定容器共享IP和端口
- None模式 该模式关闭了容器的网络功能
- Bridge模式 (默认) 所有容器都会连接到docker0虚拟网桥,并通过docker0实现与宿主机的通信
一些跨主机网络方案: - overlay
方式 跨节点容器网络互联 - macvlan方式 linux kernel模块,性能好
- flannel、weave、calico等第三方方案
想要详细了解docker network请访问传送门
docker run --network=<network>
用于指定容器连接的网络
docker run --net=host/none/bridge/container:<容器名字or容器id>/
指定网络模式(/表示或者)
docker network create -d macvlan --subnet=192.168.100.0/24 --gateway=192.168.100.1 -o parent=eth1 mac_net1
创建macvlan网络
docker network基本命令
docker network ls
用于显示已创建网络docker network connect [OPTIONS] NETWORK CONTAINER
将容器连接到一个网络docker network create [OPTIONS] NETWORK
创建网络docker network disconnect [OPTIONS] NETWORK CONTAINER
将容器网路断开docker inspect [OPTIONS] NAME|ID [NAME|ID...]
显示网络详细信息docker network prune
移除未使用的网络docker network rm NETWORK [NETWORK...]
删除网络
六、DockerFile
基础指令:
FROM
指定基础镜像,例:FROM centos:latest
RUN
执行命令(建议多行命令使用&&连接,因为每一条run命令都会生成一个中间层)
#shell格式
RUN echo “hello world”
# exec格式
RUN ["ls","-l","-a"]
COPY
复制文件,仅限于本地复制,源路径可以有多个
COPY <源路径>... <目标路径>
COPY ["<源路径>",... "<目标路径>"]
ADD
功能等同于COPY但更强大,ADD支持远程复制和自动解压
ADD 10.10.10.10:3333/ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
下载后的文件权限默认权限为 600 。
CMD
容器启动后执行的第一条命令
shell 格式: CMD <命令>
exec 格式: CMD ["可执行文件", "参数1", "参数2"...]
注意:多条CMD命令只会执行最后一条
ENTRYPOINT
功能格式近似于CMD
但ENTRYPOINT不会受到容器启动时附加的参数如/bin/bash影响
ENV
设置环境变量
ENV <key1>=<value1> <key2>=<value2>...
ENV q=1 e=2
ARG
构建参数,容器启动后不会保留
VOLUME
数据卷挂载
VOLUME <路径>
VOLUME ["<路径1>", "<路径2>"...]
EXPOSE
提供开放端口如EXPOSE 22
WORKDIR
指定工作目录
HEALTHCHECK
健康检查
MAINTAINER
创建者信息,格式为MAINTAINER user_name user_email
ONBUILD
指定该镜像作为基础镜像时执行的命令
docker build -t name:tag
构建Dockerfile镜像
参数-t
指定生成镜像的名字
参数-f
指定Dockfile文件的路径,因为Dockfile可能不在当前目录