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-SNAPSHOT
Docker 容器常用命令
- 新建并启动容器
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)