Docker
约 1607 字大约 5 分钟
2024-08-11
Docker 是一个开源的应用容器引擎,让开发者可以打包应用及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上。使用 Docker 可以更方便地打包、测试以及部署应用程序
卸载
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine安装
- 安装所需的软件包,
yum-utils提供了yum-config-manager,并且device mapper存储驱动程序需要device-mapper-persistent-data和lvm2
yum install -y yum-utils device-mapper-persistent-data lvm2- 为
yum源添加docker仓库位置,选择其中一个仓库就好
# 阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 清华大学源
yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 官方源地址(比较慢)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo- 安装
docker服务
# 直接安装最新稳定版本
yum install docker-ce
# 如果想要选择版本安装(查询可安装的版本,版本号从高到低)
yum list docker-ce.x86_64 --showduplicates | sort -r
yum -y install docker-ce-[VERSION]- 启动
docker服务
systemctl start docker- 查看
docker版本
docker -v阿里云服务器配置加速
阿里云加速器(点击管理控制台 -> 登录账号 -> 右侧镜像工具 -> 镜像加速器 -> 复制加速器地址)

配置使用
# 创建 /etc/docker 目录
sudo mkdir -p /etc/docker
# 向 daemon.json 文件追加加速器配置内容
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://p8ewheyq.mirror.aliyuncs.com"]
}
EOF
# 刷新配置
sudo systemctl daemon-reload
# 重启 docker
sudo systemctl restart docker提示
加速器地址每个账号是不一样的
Docker 镜像常用命令
- 搜索镜像
docker search java- 下载镜像
docker pull java:8- 查看镜像版本
由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过Docker Hub来搜索支持的版本。
进入Docker Hub的官网,地址:https://hub.docker.com
搜索需要的镜像,然后点击进去

查看镜像支持的版本

- 列出镜像
docker images- 删除镜像
# 指定名称删除镜像
docker rmi java:8# 指定名称删除镜像(强制)
docker rmi -f java:8# 删除所有没有引用的镜像
docker rmi `docker images | grep none | awk '{print $3}'`# 强制删除所有镜像
docker rmi -f $(docker images)- 打包镜像
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的 Dockerfile 文件
docker build -t mall/mall-admin:1.0-SNAPSHOT .- 推送镜像
# 登录Docker Hub
docker login
# 给本地镜像打标签为远程仓库名称
docker tag mall/mall-admin:1.0-SNAPSHOT macrodocker/mall-admin:1.0-SNAPSHOT
# 推送到远程仓库
docker push macrodocker/mall-admin:1.0-SNAPSHOTDocker 容器常用命令
- 新建并启动容器
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-v /mydata/nginx/html:/usr/share/nginx/html \
-d nginx:1.17.0-p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口
--name:指定容器名称,之后可以通过容器名称来操作容器
-e:设置容器的环境变量,这里设置的是时区
-v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录
-d:表示容器以后台方式运行
- 列出容器
# 列出运行中的容器
docker ps
# 列出所有容器
docker ps -a- 停止容器
docker stop $ContainerName(or $ContainerId)栗子
docker stop nginx
#或者
docker stop da2a34c40f23- 强制停止容器
docker kill $ContainerName- 启动容器
docker start $ContainerName- 进入容器
# 先查询出容器的 pid
docker inspect --format "{{.State.Pid}}" $ContainerName
# 根据容器的 pid 进入容器
nsenter --target "$pid" --mount --uts --ipc --net --pid
- 删除容器
# 删除指定容器
docker rm $ContainerName
# 按名称通配符删除容器,比如删除以名称 mall- 开头的容器
docker rm `docker ps -a | grep mall-* | awk '{print $1}'`
# 强制删除所有容器
docker rm -f $(docker ps -a -q)- 查看容器的日志
# 查看容器产生的全部日志
docker logs $ContainerName
# 动态查看容器产生的日志
docker logs -f $ContainerName- 查看容器的 IP 地址
docker inspect --format '{{ .NetpreciousSettings.IPAddress }}' $ContainerName- 修改容器的启动方式
# 将容器启动方式改为always
docker container update --restart=always $ContainerName- 同步宿主机时间到容器
docker cp /etc/localtime $ContainerName:/etc/- 指定容器时区
docker run -p 80:80 --name nginx \
-e TZ="Asia/Shanghai" \
-d nginx:1.17.0- 查看容器资源占用状况
# 查看指定容器资源占用状况,比如cpu、内存、网络、io状态
docker stats $ContainerName
# 查看所有容器资源占用情况
docker stats -a
- 查看容器磁盘使用情况
docker system df
- 执行容器内部命令
docker exec -it $ContainerName /bin/bash
- 指定账号进入容器内部
# 使用root账号进入容器内部
docker exec -it --user root $ContainerName /bin/bash- 查看所有网络
docker netprecious ls
- 创建外部网络
docker netprecious create -d bridge my-bridge-netprecious- 指定容器网络
docker run -p 80:80 --name nginx \
--netprecious my-bridge-netprecious \
-d nginx:1.17.0修改镜像存放位置
- 1、查看Docker镜像的存放位置
docker info | grep "Docker Root Dir"
- 2、关闭 Docker 服务
systemctl stop docker- 3、先将原镜像目录移动到目标目录
mv /var/lib/docker /mydata/docker- 4、建立软连接
ln -s /mydata/docker /var/lib/docker
- 5、再次查看可以发现镜像存放位置已经更改

Docker 容器清理
- 查看 Docker 占用的磁盘空间情况
docker system df- 删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm- 删除所有
dangling镜像(没有Tag的镜像)
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")- 删除所有
dangling数据卷(即无用的volume)
docker volume rm $(docker volume ls -qf dangling=true)