0. 想要写会代码
# docker 版本
docker version
# 返回docker客户端的所有命令提示选项
docker
# 提示docker stats这一命令的各种选项
docker stats --help
1. 镜像
# 已安装的镜像
# 可安装的镜像建议通过docker hub查看
docker images
# 拉取镜像
# 版本号缺省时,默认拉取最新版本
docker pull <镜像名称>:<版本号>
# 移除本机上的镜像
docker rmi 镜像仓库name/id
# 更新本机上的镜像
# 提交镜像的更新到一个新的容器
docker commit -m="xxx" -a="zzz" 容器id 创建的镜像name:tag
-m 注释
-a 作者
# 构建镜像
# Dockerfile文件:.表示当前目录下的Dockerfile
docker build -t 构建后的镜像名 Dockerfile文件
-t 指定构建后的镜像名称
# 给镜像添加一个新的标签
docker tag 镜像id 镜像name:tag
# 可以查看镜像的历史操作记录(镜像pull后的一些动作,image layers)
# 具体的dockerfile可以在docker hub中查看(dockerfile一般不会打包,因为只用于构建镜像)
docker history imageId
1.1 dockerfile构建镜像
说白了就是:在一个镜像基础上,通过shell做一些事情
举个🌰:
这里我在最小安装的ubuntu镜像之上,引入国内源,并安装ping+ifconfig
FROM ubuntu:15.10
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
&& touch /etc/apt/sources.list \
&& echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse" >> /etc/apt/sources.list \
&& apt-get update \
&& apt install -y iputils-ping=3:20121221-5ubuntu2 \
&& apt install -y net-tools=1.60-26ubuntu1
2. 容器
# 运行中的容器id name 执行的命令 创建时间 运行状态 端口号映射
docker ps
-a 所有容器(运行+停止的)
# 删除容器
docker rm -f 容器id
-f force
# 查询指定容器的元信息(内部配置)
docker inspect 容器name/id
# 启动一个停止的容器
docker start 容器id
# 停止一个正在启动的容器
docker stop 容器id
# 重启一个已经启动了的容器
docker restart 容器id
# 创建一个新容器并启动它
# /bin/bash 这里我们希望有个交互式 Shell,因此用的是 /bin/bash,同bash
docker run -itd --name containerName image [/bin/bash]
-i 交互操作
-t 终端
-d 后台启动(不会直接进入容器)
--name 容器别名
--link 将指定ip写到/etc/hosts(动态ip没用,不能使用容器名动态访问,并且还只是单向的)
# 创建时指定 端口映射
docker run -d -P traning/webapp python app.py
-P 将容器内部使用的吨端口映射到宿主机的端口上(Docker默认开放5000端口)
docker run -d -p 5000:5000 traning/webapp python app.py
-p 手工指定docker映射宿主机的端口号
# 进入容器终端(推荐)
# 使用exit退出终端时,不会停止容器
docker exec
docker exec -it docker容器id /bin/bash
# 进入容器终端
# 使用exit退出终端时,会顺带停止容器
docker attach
# 查询指定容器的资源占用情况
docker stats 容器name/id
# 查询指定容器(运行中)的进程情况
docker top 容器name/id
# 导出 导入容器
# 也可通过URL导入远程文件
docker export 容器id > 导出文件
docker import 导入文件 导入后的镜像名:tag
# 容器导入后将作为镜像存储
# 丢弃所有的历史记录和元数据,仅导入快照状态
docker load:载入完整记录,体积较大
3. 网络
# 已配置的网络
docker network ls
# 自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 networkName
-d 指定网络类型(--driver)
--subnet 子网
--gateway
--ip 指定静态ip(必须指定subnet)