docker常用容器镜像等命令和操作---教程手册
引:
附上官方docker架构图:
client客户端:操作——>发送请求命令
Dockerdeamon:Docker引擎,解析客户端发送的命令
images:镜像,一些特殊的文件叠加而成。镜像(Image)就是一堆只读层(read-only layer)的统一视角。镜像是创建容器的基石【。。。。最简单理解docker镜像相当于虚拟机镜像(操作系统 .iso文件)】
contains:docker容器是由docker镜像创建的运行实例。。。容器是一堆读写层(read-write layer)的统一视角。。容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。。。【最简单理解docker容器相当于用镜像创建好的虚拟机本身 】
运行态容器(running container):一个可读写的统一文件系统 加上 隔离的进程空间和包含其中的进程
registy: 镜像仓库, docker hub 中的镜像,可拉取下来使用
容器 = 镜像 + 读写层 -------(笔者不推荐使用最简单理解,除非确实对于docker镜像和容器无法领会概念,且使用过VMware等虚拟机软件,可以简单将虚拟机和docker两种虚拟化技术进行类比,其实概念不完全相同) 理解Docker原理,关键一点是理解docker 的统一文件系统 , 理解容器和镜像推荐链接: http://dockone.io/article/783
一、docker引擎服务启停、重启
# 开启
systemctl start docker
# 重启
systemctl restart docker
# 停止
systemctl stop docker
# 查看状态
systemctl status docker
附:配置docker镜像加速器, https://yeasy.gitbook.io/docker_practice/install/mirror
注意配置完镜像加速器需要重启:
sudo systemctl daemon-reload sudo systemctl restart docker
二、docker镜像相关命令
# 列出镜像, (该命令中镜像大小为,解压后的大小) docker images # 拉取镜像, 尖括号中为参数,镜像名称,本例中拉取python3.6镜像 docker pull <python:3.6> # 查看仓库中是否有某镜像 docker search # 删除镜像(注意删除容器为rm, 删除镜像为rmi), 可删除多个 docker rmi <镜像名称或者id> <镜像名称或者镜像id> ...
三、docker容器相关命令
# 创建容器 (run相当于create + start) docker run [options] image [command] [arg...] #例: docker run -it --name=c1 centos /bin/bash # -i : 交互式容器 (前台运行) # -d:守护式容器,(后台运行) # -t : 分配一个tty终端,来操作容器 # --name: 指定容器名称, 唯一、不能重复 # 查看正在运行中的容器 docker ps # 查看所有容器 docker ps -a docker ps -l (查看最后一次运行的容器) # 登录进入容器中 docker exec -it <容器名称或id> /bin/bash # 停止容器 docker stop <容器名称或id> # 启动容器 docker start <容器名称/id> <容器名称/id> # 重启 docker restart <容器名称或id> # 查看容器详细信息,, 此inspect命令后可加 format参数进行格式化输出和筛选输出 docker inspect <容器名称或id> # 删除容器 docker rm <容器名称/ id> docker rm `docker ps -a -q` # 查看容器日志 docker logs <容器名称或id> # 文件拷贝,, 拷贝入容器中,和从容器中拷贝出来均可 docker cp <需要拷贝的文件/目录> <容器名称: 容器目录> docker cp <容器名称: 容器目录> <需要拷贝的文件/目录> # 目录挂载: 创建容器时,可将宿主机和容器的目录进行映射,这样就可以通过修改宿主机的文件去影响容器 # 例如启动一个centos容器,宿主机的/test目录挂载到centos容器的/soft目录: docker run -itd -v /test:/soft centos /bin/bash
四、制作Docker镜像
方法:1、docker commit构建
2、docker build + Dockerfile文件
1、利用容器制作镜像
#1、 利用容器制作镜像(或者说利用基础镜像之后安装需要的包做成容器,再导出这个容器做成镜像) docker commit [options] container [image_name:tag] # 镜像打包 # 镜像打包 docker save -o <输出路径> <镜像名称> #eg: docker save -o /root/my_images/python.tar mypython # 导入打包好的镜像 docker load -i <打包好的镜像的路径> ## 容器打包与导入打包好的容器 # 容器打包:export ,导入包好的容器:import docker export -o /root/my_container/python.tar my_python docker import python.tar my_python:least
2、docker build构建镜像,使用Dockfile
2-1:DSL语法,
FROM 基础镜像
MAINTAINER 维护者信息
RUN 安装软件
ADD 拷贝文件及解压工作
WORKDIR cd切换工作目录
VOLUME 目录挂载
EXPOSE 端口映射
CMD 指定运行的命令
ENV 设置环境变量
#eg: # 基于镜像基础 FROM python:3.7 # 设置代码文件夹工作目录 /app WORKDIR /app # 复制当前代码文件到容器中 /app ADD . /app # 安装所需的包 RUN pip install -r requirements.txt # Run app.py when the container launches CMD ["python", "app.py"]
2-2:根据Dockerfile生成容器,
#用docker build生成容器,使用rm删除中间产生的临时容器, 注意最后一定加".", 表示当前目录 docker build -t <contains_name> --rm=true .
五、Docker网络管理
5.1 默认网络
# 查看docker默认网络 docker network ls
docker中默认的三种网络为bridge、host、none, 其中容器创建时默认的为bridge方式,该方式经过配置,可与宿主机和外网通信。
(若在docker集群下,docker还提供了docker_gwbridge和ingress两种默认网络),
# 若需查看某个容器的网络配置,可用 docker inspect <contains name/id>
# 查看使用bridge网络驱动的容器, 可用
docker network inspect bridge
5.2 自定义网络
# 例:创建一个基于bridge驱动的网络: my_net docker network create --driver bridge my_net
# 例:使用pytyon镜像创建容器test_network时,指定网络为自定义的网络my_net
docker run -itd --name=test_network --network=my_net python
# 为容器my_contain另外添加一种默认的bridge网络管理方式,
docker network connect bridge my_contain
# 断开my_contain容器的bridge网络
docker network disconnect bridge my_contain
# 移除自定义网络my_net, 移除成功后会返回网络的名称
docker network rm my_net
5.2 容器间的网络通信
参考: https://www.huaweicloud.com/articles/9933f12e2049a03b02d1b4791e2b3f39.html