1.配置docker yum 源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2.安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin2.1启动docker
sudo systemctl start docker 2.2配置docker开机启动
systemctl enable docker2.3配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.1ms.run",
		"https://mirror.ccs.tencentyun.com"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker或者
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.xuanyuan.me",  # 轩辕镜像(境内CDN,兰州地区推荐)
    "https://docker.m.daocloud.io", # 国内老牌服务商
    "https://docker.imgdb.de",     # 德国镜像站(全球化同步)
    "https://docker-0.unsee.tech"  # 亚洲节点加速站
  ]
}
EOF
# 应用配置并重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker或者
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "runtimes": {
    "nvidia": {
      "args": [],
      "path": "nvidia-container-runtime"
    }
  },
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc"
  ]
}
EOF
# 应用配置并重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker3.下载镜像
检索:docker search 
docker search nginx /  docker search docker.1ms.run/nginx 
下载 docker pull
docker pull nginx:1.26.0
列表:docker images 查看镜像
删除:docker rmi
docker rmi nginx:latest / docker rmi 94543a6c1aef4.启动容器
运行:docker run 
docker run nginx / docker run nginx:1.26.0
docker run -d --name mynginx nginx (-d 后台启动 --name 取别名)
docker run -d --name mynginx26 -p 88:80 nginx:1.26.0 (-p 88:80 88是暴露出去的端口,80是容器内的端口)
常见命令举例
查看:docker ps 查看存活对象  docker ps -a 查看所有对象
停止:docker stop
docker stop 226 / docker stop mystifying_clarke
启动:docker start
docker start mystifying_clarke
重启:docker restart
docker restart mystifying_clarke
状态 :docker stats
日志:docker logs
docker logs 226
进入: docker exec
docker exec -it mynginx /bin/bash  退出编辑exit
删除: docker rm 
docker rm -f 226 强制删除
docker rm 226 需要先 docker stop 226
批量删除容器
docker container prune (删除退出的容器)
docker rm -f `docker ps -q`
docker rm -f $(docker ps -q)
提交:docker commit 
docker commit -m "update inedx.html" mynginx mynginx:v1.0 (-m 备注信息 )
保存:docker save
docker save -o mynginx.tar mynginx:v1.0 (-o 打包成对应的tar包)
加载:docker load
docker load -i mynginx.tar (-i 指定加载的压缩包)
登录:docker login (容易连接不了)
改名:docker tag mynginx:v1.0 lilusheng/mynginx:v1.0
推送:docker push lilusheng/mynginx:v1.0 不能使用 5.docker存储
目录挂载,数据卷
目录挂载:
docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx                       ( -v /app/nghtml:/usr/share/nginx/html)
卷映射:
docker run -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name app04 nginx (-v ngconf:/etc/nginx)
卷统一位置:
/var/lib/docker/volumes/<volumn-name> eg:/var/lib/docker/volumes/ngconf/_data
查看卷:docker volume ls 
创建卷 :docker volume create haha
查看卷详情:docker volume inspect ngconf6.自定义网络
容器内访问:curl 119.45.193.239:80 (很奇怪)
docker container inspect 
curl http://172.17.0.3:80
docker为每个容器分配唯一ip,使用容器ip+容器端口可以相互访问,ip由于各种原因可能会变化
docker0默认不支持主机域名访问
//先创建网络
docker network create mynet
//查看网络
docker network ls
//创建
docker run -d -p 80:80 --name app01 --network mynet nginx
docker run -d -p 88:80 --name app02 --network mynet nginx
进入app01测试容器内访问
docker exec -it app01 bash
curl app02:806.1实例测试举例
redis主从同步集群
主:
docker run -d -p 6380:6379 
-v /app/rd2:/bitnami/redis/data 
-e REDIS_REPLICATION_MODE=master 
-e REDIS_PASSWORD=123456 
--network mynet 
--name redis01 bitnami/redis
从:
docker run -d -p 6380:6379 \
> -v /app/rd2:/bitnami/redis/data \
> -e REDIS_REPLICATION_MODE=slave \
> -e REDIS_MASTER_HOST=redis01 \
> -e REDIS_MASTER_PORT_NUMBER=6379 \
> -e REDIS_MASTER_PASSWORD=123456 \
> -e REDIS_PASSWORD=123456 \
> --network mynet --name redis02 bitnami/redis
mysql的docker启动命令:
docker run -d -p 3306:3306 \
-v /app/myconf:/etc/mysql/conf.d \
-v /app/mydata:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:8.0.37-debian7.docker compose
通过compose.yaml 批量的启动对应的容器
--------------------------------
compose.ymal 
顶级元素:
name 名字
services 服务
networks 网络
volumes 卷
configs 配置
secrets 密钥
完整的ymal
--------------------------------------
name: myblog
services:
  mysql:
    container_name: mysql
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=wordpress
    volumes:
      - mysql-data:/var/lib/mysql
      - /app/myconf:/etc/mysql/conf.d
    restart: always
    networks:
      - blog
  wordpress:
    container_name: wordpress-app
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      - WORDPRESS_DB_HOST=mysql
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=123456
      - WORDPRESS_DB_NAME=wordpress
    volumes:
      - wordpress:/var/www/html
    restart: always
    networks:
      - blog
    depends_on:
      - mysql
volumes:
  mysql-data:    
  wordpress:
networks:
  blog:
--------------------------------
上线:docker compose up -d  (第一次的启动)
docker compose -f compose.yaml up -d (-f compose.yaml 指定文件)
下线:docker compose down 
docker compose -f compose.yaml down
docker compose -f compose.yaml down --rmi all -v (--rmi all -v  指的是下线镜像和对应的卷)
启动:docker compose start x1 x2 x3 (指的是停止容器的启动)
停止:docker compose stop x1 x2 x3
扩容:docker compose scale x2=3 (某个容器复制三份)
docker compose -f compose.yaml down --rmi all -v8.Dockerfile 自定义镜像
基础环境
软件包
启动命令
常见指令
FROM :指定镜像基础环境
RUN:运行自定义命令
CMD:容器启动命令和参数
LABEL:自定义标签
EXPOSE:指定暴露端口
ENV:环境变量
ADD:添加文件到镜像
COPY:复制文件到镜像
ENTRYPOINT:容器固定启动目录
VOLUME:数据卷 
USER:指定用户和用户组
WORKDIR:指定默认工作目录
ARG : 指定构建参数8.1实例
1.rz 上传对应的jar包
app01.jar
2.创建Dockerfile文件
vim Dockerfile
-------------------------
FROM openjdk:8
LABEL author=lilusheng
COPY app01.jar /app01.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app01.jar"]
-------------------------
3.进行镜像构建
docker build -f Dockerfile -t myjavaApp:v1.0 .
生成对应的镜像myjavaApp:v1.0
4.启动镜像
docker run -d -p 8080:8080 myjavaApp:v1.0
5.进行网页验证
https:xxx:8080/books
结果:springboot is running 验证成功