安装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. 配置yum源
- 安装yum工具
yum install -y yum-utils device-mapper-persistent-data lvm2
- 配置yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
几个常见的错误
- 报错
去/etc/yum.repos.d/
路径下的配置文件里,看看是否有中文注释,删了中文注释就行了 - 报错
把资源文件放到指定的路径(/opt/centos/repodata/
)下就行了 - 安装docker时报错:
解决办法:安装docker-ce-selinux
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4. 启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5. 配置镜像加速
- 打开阿里云的容器镜像服务
- 点击管理控制台:
- 按照步骤配置镜像加速器即可。
在拉取镜像的时候报错:
原因:现在阿里云的镜像已经停用失效,导致网络无法访问。
解决:可以修改配置文件:
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.1panel.live/"
]
}
重新加载配置文件并重启docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像和容器
利用Docker安装应用时,Docker会自动搜索并下载镜像(image)。镜像包含了:应用本身、应用运行所需的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,成为容器(container)
镜像仓库:存储和管理镜像的平台。
镜像帮助文档:dockerHub
部署Mysql
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:5.7.32
- docker run:创建并运行一个容器
- -d:让容器在后台运行
- –name:给容器起名,必须唯一
- -p:设置端口映射【宿主机 : 容器内】
- -e:设置环境变量
- mysql:5.7.32:指定运行的镜像名[镜像名]:[版本](版本省略就默认是最新版)
常见命令
docker run:创建并运行容器
docker start:启动容器,但是不会创建容器
docker exec -it 容器名 bash:进入容器内部
给docker ps和docker images命令取个别名
- 进入.bashrc文件:
vim ~/.bashrc
- 起别名:
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
- 让修改的文件生效:
source ~/.bashrc
数据卷挂载
数据卷(volume)是一个虚拟目录,是容器内目录和宿主机目录之间映射的桥梁。(是个双向映射)
- 在执行docker run命令,使用
-v 数据卷:容器内目录
,可以完成数据卷的挂载。- 当创建容器时,如果挂载了数据卷,且数据卷不存在,会自动创建数据卷。
本地目录挂载
- 在执行docker run命令,使用
-v 本地目录:容器内目录
,可以完成本地目录的挂载。- 本地目录必须以 / 或 ./ 开头,如果直接以名称开头,会被识别成数据卷而非本地目录。
docker run -d \
--name mysql \
-p 3307:3306 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql:5.7.32
自定义镜像
镜像包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程实际上就是把上述文件打包的过程。
镜像结构
Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令,用指令来说明要执行什么操作来构建镜像。
构建镜像
docker build -t myImage:1.0 .
- -t:给镜像起名,格式:[镜像名]:[版本](不指定版本默认为latest)
- . :指定Dockerfile所在目录,如果在当前目录就指定为“.”
网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上。
Docker的网络操作命令
加入自定义网络的容器才可以通过容器名互相访问。
把容器加入网络的两种方式:
先创建容器,再把容器加入网桥:docker network connect 网络名 容器名
创建容器的同时把容器加入网桥:docker run -d .... --network 网络名 ...
项目部署
后端部署
- 打包项目
- 把打包好的
jar包
和Dockerfile文件
一起丢到服务器上
- 切换到/root/hm目录下,构建自定义镜像hm-java:
docker build -t hm-java:1.0 .
- 创建并运行容器,同时把容器加入网桥:
docker run -d --name hm-java -p 8080:8080 --network lsh hm-java:1.0
部署前端
- 准备好
静态资源
和配置文件
- 创建容器并挂载
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--network lsh \
nginx
DockerCompose
通过一个独立的docker-compose.yml模板文件(yaml格式)来定义一组相关联的应用容器,帮助我们实现多个关联的Docker容器的快速部署。
docker-compose.yml
文件:
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
标签:容器,nginx,mysql,镜像,Docker,docker
From: https://blog.csdn.net/qq_57882997/article/details/144959114