官方文档:https://docs.docker.com/engine/install/centos/
1 卸载&安装
1.1 卸载旧版本
[root@centos704 ~]# yum list installed|grep docker
containerd.io.x86_64 1.6.33-3.1.el7 @docker-ce-stable
docker-buildx-plugin.x86_64 0.14.1-1.el7 @docker-ce-stable
docker-ce.x86_64 3:26.1.4-1.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:26.1.4-1.el7 @docker-ce-stable
docker-ce-rootless-extras.x86_6426.1.4-1.el7 @docker-ce-stable
docker-compose-plugin.x86_64 2.27.1-1.el7 @docker-ce-stable
[root@centos704 ~]#
yum remove docker*
yum remove containerd.io.x86_64
1.2 配置docker yum源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
1.3 安装最新版本docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.4 启动docker
sudo systemctl start docker
1.5 允许开机启动
systemctl enable docker
1.6 添加镜像加速
目前国内很多镜像源都停止服务了,会碰到TLS handshake timeout
的问题。例如腾讯、网易、上海交大的加速在我这个环境都不能成功拉取,阿里云的个人专属加速地址可以成功,但是目前阿里云不同步docker hub了,镜像都是老版本。下面几个是临时找到的,希望能存活久一些。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://dockerproxy.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2 命令
2.1 信息
查看版本
docker version
查看详细信息
docker info
2.2 镜像
docker image --help
检索
docker search
docker search nginx
拉取
docker pull
docker pull nginx
docker pull nginx:1.26.0
列出本地镜像
docker images
删除指定ID的镜像
docker rmi e784f4560448
docker rmi nginx:latest
提交镜像
docker commit --help
docker commit -m "update index.html" mynginx mynginx:v1.0
保存镜像
docker save --help
docker save -o mynginx.tar mynginx:v1.0
加载镜像
docker load --help
docker load -i mynginx.tar
登录
docker login
添加镜像别名
docker tag --help
docker tag mynginx:v1.0 zhangbe1hai/mynginx:v1.0
推送
docker push zhangbe1hai/mynginx:v1.0
2.3 容器
运行一个新容器
docker run --help
docker run nginx
后台启动
docker run -d nginx
设置容器名
docker run --name mynginx nginx
端口映射
docker run -p 80:80 nginx
查看运行中的容器
docker ps
查看所有容器
docker ps -a
启动已停止的容器
docker start 592
停止容器
docker stop keen_blackwell
重启容器
docker restart 592
查看容器状态
docker stats 592
查看容器的细节
docker inspect a33
查看容器日志
docker logs 592
删除容器
docker rm 592
docker rm -f 592
批量删除容器
docker rm -f $(docker ps -aq)
交互模式进入容器,使用bash
docker exec -it mynginx /bin/bash
docker exec -it mynginx bash
退出容器
exit
2.4 存储
2.4.1 目录挂载
docker run -v /opt/files/nginxhtml:/usr/share/nginx/html nginx
外部没有目录会自动创建
docker run -d --name mynginx -p 80:80 -v /opt/files/nginxhtml:/usr/share/nginx/html nginx
也可以挂载文件
2.4.2 卷映射
docker run -d -p 81:80 -v ngconfig:/etc/nginx/ -v /opt/files/nginxhtml:/usr/share/nginx/html --name nginx_01 nginx
列出所有卷
docker volume ls
创建一个卷
docker volume create haha
查看一个卷的详情
docker volume inspect ngconfig
cd /var/lib/docker/volumes/ngconfig/_data
2.5 网络
docker为每个容器分配唯一IP,docker0默认不支持主机域名,创建自定义网络,容器名就是稳定域名。
docker network --help
创建一个自定义网络
docker network create mynet
创建容器时指定加入自定义网络
docker run -d -p 81:80 --name app2 --network mynet nginx
3 docker compose
3.1 命令
上线
docker compose -f compose.yaml up -d
下线
docker compose -f compose.yaml down
docker compose -f compose.yaml down --rmi all -v
启动
docker compose start x1 x2 x3
停止
docker compose stop x1 x3
扩容
docker compose scale x2=3
3.2 compose.yaml
https://docs.docker.com/compose/compose-file
name: myblog
services:mysql:container_name: mysqlimage: mysql:8.0ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=wordpressvolumes:- mysql-data:/var/lib/mysql- /app/myconf:/etc/mysql/conf.drestart: alwaysnetworks:- blogwordpress:container_name: wordpressimage: wordpressports:- "8080:80"environment:WORDPRESS_DB_HOST: mysqlWORDPRESS_DB_USER: rootWORDPRESS_DB_PASSWORD: 123456WORDPRESS_DB_NAME: wordpressvolumes:- wordpress:/var/www/htmlrestart: alwaysnetworks:- blogdepends_on:- mysql
volumes:mysql-data:wordpress:
networks:blog:
4 Dockerfile
https://docs.docker.com/reference/dockerfile/
常见指令 | 作用 |
---|---|
FROM | 指定镜像基础环境 |
RUN | 运行自定义命令 |
CMD | 容器启动命令或参数 |
LABEL | 自定义标签 |
EXPOSE | 指定暴露端口 |
ENV | 环境变量 |
ADD | 添加文件到镜像 |
COPY | 复制文件到镜像 |
ENTRYPOINT | 容器固定启动命令 |
VOLUME | 数据卷 |
USER | 指定用户和用户组 |
WORKDIR | 指定默认工作目录 |
ARG | 指定构建参数 |
FROM openjdk:17LABEL author=lfyCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]
docker build -f Dockerfile -t myjavaapp:v1.0 .