1.yum和docker的安装和换源:
yum安装及换源参考如下帖子:
docker安装以及换源:
1.首先删除旧的docker:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
2.执行命令安装docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
3.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
4.配置镜像加速
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn"
]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
2.docker基础
1.docker常用命令
命令 | 说明 | 文档地址 |
---|---|---|
docker pull | 拉取镜像 | docker pull |
docker push | 推送镜像到DockerRegistry | docker push |
docker images | 查看本地镜像 | docker images |
docker rmi | 删除本地镜像 | docker rmi |
docker run | 创建并运行容器(不能重复创建) | docker run |
docker stop | 停止指定容器 | docker stop |
docker start | 启动指定容器 | docker start |
docker restart | 重新启动容器 | docker restart |
docker rm | 删除指定容器 | docs.docker.com |
docker ps | 查看容器 | docker ps |
docker logs | 查看容器运行日志 | docker logs |
docker exec | 进入容器 | docker exec |
docker save | 保存镜像到本地压缩文件 | docker save |
docker load | 加载本地压缩文件到镜像 | docker load |
docker inspect | 查看容器详细信息 | docker inspect |
用一副图来表示这些命令的关系:
docker run详细解读:
某些命令过于复杂,也可以给命令起别名,来简化命令。
2.数据卷
1.数据卷挂载
数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。
ps:注意的是数据卷的位置是docker自动生成的,无需本人操作。缺点是目录较深,不便于操作。
常用命令如下:
也可以在创建容器时挂载数据卷:
在执行docker run命令时,使用 -v数据卷:****容器内目录可以完成数据卷挂载
当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
2.目录挂载
在执行docker run命令时,使用 -v本地目录:****容器内目录可以完成本地目录挂载
本地目录必须以"/"或 "./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
-v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录
3.数据卷挂载和目录挂载的区别
数据卷由系统自动生成,较方便。但是生成目录较深,当容器生成匿名卷时数据不好迁移。
目录挂载中目录由自己生成,方便查找。缺点是目录需要自己提前生成。
3.自定义镜像
镜像:
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
构建一个Java镜像的步骤:
①准备一个Linux运行环境
②安装JRE并配置环境变量
③拷贝Jar包
④编写运行脚本
镜像是分层构建的,镜像的结构如图:
Dockerfile:
Dockerfile就是一个文本文件,其中包含一个个的指令****(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:
更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs
Dockerfile实例说明:
1.我们可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构
2.也可以直接基于JDK为基础镜像,省略前面的步骤:
当编写好了dockerfile后执行以下命令构建镜像:
docker build -t 镜像名 Dockerfile目录
实例:
docker build -t myimage:1.0 .
-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest
. :是指定Dockerfile所在目录,如果就在当前目录,则指定为"."
4.自定义网络
问题:两个容器创建后要求互连,在同一网桥中可以连接,但是当某一服务关闭后ip地址可能被另一个容器占用,因此需要自定义网络让容器通过名字的方式在同一网桥中互连。
加入自定义网络的容器才可以通过容器名互相访问(默认的不行),Docker的网络操作命令如下:
DockerCompose
问题:将每一个服务都去部署到服务器,太繁琐。
Docker Compose通过一个单独的docker-**compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。**
docker compose的命令格式如下:
docker compose [OPTIONS] [COMMAND]
实例展示:
单个部署:
多个部署:
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- hm-net
hmall:
build:
context: .
dockerfile: Dockerfile
container_name: hmall
ports:
- "8080:8080"
networks:
- hm-net
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
- "18081:18081"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- hmall
networks:
- hm-net
networks:
hm-net:
name: hmall