Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是一个Client-Server结构的系统。Docker镜像Image就是只读的模版,镜像可以用来创建docker容器,一个镜像可以创建多个容器。应用程序或服务运行在容器里面,容器类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。Docker仓库存放镜像的地方。
1. docker下载和安装
# root 运行
## 卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
## 查看是否存在Podman,如有,删除
rpm -q podman
yum erase podman buildah
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置镜像仓库
# 官方镜像仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 阿里镜像仓库(建议)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新 yum 缓存
yum makecache
# 安装
yum install docker-ce docker-ce-cli containerd.io
# 版本信息
docker version
docker info
# docker系统信息
docker system df
# 卸载
# yum remove docker
# rm -rf /var/lib/docker
# rm -rf /bar/lib/containerd
2. docker服务操作
systemctl start docker # 启动
systemctl stop docker # 停止
systemctl restart docker # 重新启动
systemctl status docker # 服务状态
systemctl enable docker # 设置开机启动
3. docker镜像操作
# 帮助信息
docker --help
docker pull --help
docker search hello-world # 镜像仓库搜索
docker pull hello-world # 下载镜像
docker images
docker images -a # 显示所有
docker images -q # 只显示image ID号
# 删除镜像
# docker rmi hello-world
# docker feb5d9fea6a5
# docker rmi -f $(docker images -qa) # 强制删除所有镜像
4. 容器创建
docker run 参数
--name
-i
-t
-P 随机端口
-p 指定端口映射
# 创建容器,
docker run -d redis:6.0.8
# 容器名有唯一,包括和已经停止的容器名不能重复
docker run -it --name=myubuntu ubuntu /bin/bash # 交互伪终端 interactive tty
# 没有前台进程,调用ubuntu容器,会自动退出
docker run -d --name=myubuntu ubuntu # -d 后台运行
5. 容器查看
# 查看正在运行的容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有的容器,包括已经停止的
docker ps -a -l
docker ps -a -n 3
docker logs 95e25474bc7e # 查看容器日志
docker top 95e25474bc7e # 查看容器内运行的进程
docker inspect 95e25474bc7e # 查看容器内部细节
6. 容器退出,启动和重新进入
exit # 退出容器
ctl+p+q # 退出,容器不停止
docker start 95e25474bc7e # 启动已经停止的容器
docker restart 95e25474bc7e
docker stop 95e25474bc7e
docker kill 95e25474bc7e # 杀死一个或多个容器
docker rm 95e25474bc7e # 删除停止运行的容器, 容器不会出先在 $(docker ps -qa)中
docker exec --help
docker exec -it 95e25474bc7e /bin/bash # exec:在容器中打开新的终端,启动新的进程,用exit退出,不会导致容器的停止
docker attach 95e25474bc7e # 直接进入容器命令的终端,不会启动新的进程,用exit退出,会导致容器的停止
## 注:工作中,docker -d 容器id或容器名 后台运行,使用docker exec -it 容器id或容器名,启动新的前台进程,操作完,exit退出
7. 容器导入导出
# 拷贝容器中的文件到主机
# docker cp 容器id:容器内路径 目的主机路径
# 在容器2067514cb1f4中建一个文件
touch tmp/a.txt
ctl+p+q
docker cp 2067514cb1f4:/tmp/a.txt /home/zheng/tmp
# 导出容器
# docker export 容器id > 文件名.tar
docker export 2067514cb1f4 > /home/zheng/tmp/u2.tar
# 导出容器
# cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
cat /home/zheng/tmp/u2.tar|docker import - zheng/ubuntu:latest
docker images
docker run -it zheng/ubuntu /bin/bash
8. 镜像创建
# 由容器创建新的镜像
# 镜像 -> 容器 —> 增加新功能 -> 新的镜像
# docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
docker run -it --name=u3 ubuntu /bin/bash
apt-get update
apt-get install vim
ctl+p+q # 退出,容器不停止
# 容器外执行
docker commit -m="vim added" -a="zheng" 6e24333809ed zheng/myubuntu:1.0
9. docker容器数据卷
# 主机和容器之间共享数据,备份docker容器的数据
# 没有文件夹,自动建立
# docker run -it --privileged=true -v 宿主机目录:容器内目录 镜像名
docker run -it --privileged=true -v /docker/host_data:/data --name=myubuntu ubuntu
# 容器内目录只读
docker run -it --privileged=true -v /docker/host_data:/data:ro --name=myubuntu ubuntu
参考: