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-plugin
2.1启动docker
sudo systemctl start docker
2.2配置docker开机启动
systemctl enable docker
2.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 docker
3.下载镜像
检索: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 94543a6c1aef
4.启动容器
运行: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 ngconf
6.自定义网络
容器内访问: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:80
6.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-debian
7.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 -v
8.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 验证成功