本文章以黑马的docker课程为例,除了讲解hmall的部署外,还包含服务器的购买(以阿里云为例)、linux环境下用docker的安装和项目部署,mysql安装、前后端项目打包和部署、ngnix安装和配置、自定义网络、DockerCompose配置、redis安装及启动连接,以及RabbitMQ、elasticsearch、Nacos、Sentinel、Seata等常用中间件的安装,希望能帮助到初学者的学习。
说在前面:以一张图说明docker常见命令、容器和镜像的区别。对docker想要个更详细的理解的可以去看b站的课程,本文章没有讲解docker的原理,只是讲解了操作的命令。
1.安装Docker
1.1卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1.2配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
由于docker关闭了中国的访问渠道,所以要配置阿里云镜像,原先的download.docker.com
不能再使用。
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.3安装Docker
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.4启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
1.5配置镜像加速
这里以阿里云镜像加速为例。
1.6注册阿里云账号
首先访问阿里云网站:
注册一个账号。
1.7开通镜像服务
在首页的产品中,找到阿里云的容器镜像服务:
点击后进入控制台:
首次可能需要选择立刻开通,然后进入控制台。
1.8配置镜像加速
找到镜像工具下的镜像加速器 :
页面向下滚动,即可找到配置的文档说明:
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
2.安装MySql
2.1安装mysql
由于mysql默认挂载的数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载,这样,不仅操作数据卷方便,还能实现数据的持久保存,哪怕更新mysql版本,原先的数据依然存在。如将mysql的数据卷挂载到root目录下。
安装命令:
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
mysql:8.0.28
命令解读:
-
docker run -d
:创建并运行一个容器,-d
则是让容器以后台进程运行。 -
--name mysql
: 给容器起个名字叫mysql
,你可以叫别的。 -
-p 3306:3306
: 设置端口映射。-
容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
-
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
-
格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的3306映射到容器内的3306端口
-
-
-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数-
格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定 -
案例中,
TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置MySQL默认密码
-
-
-v
: 配置本地数据卷挂载,以data
为例,不配置会默认挂载在/var/lib/docker/volumes/data/_data
目录下,配置本地数据卷后不仅操作数据卷方便,还能实现数据的持久保存。-
格式:
-v 要配置到的本地目录:对应镜像原始挂载目录
,镜像原始的挂载目录要去DockerHub网站或者软件的官方网站中查看。 -
注意:本地目录或文件必须以
/
或./
开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。
-
-
mysql
: 设置镜像名称,Docker会根据这个名字搜索并下载镜像-
格式:
REPOSITORY:TAG
,例如mysql:8.0.28
,其中REPOSITORY
可以理解为镜像名,TAG
是版本号 -
在未指定
TAG
的情况下,默认是最新版本,也就是mysql:latest
-
2.2 开放远程连接端口和授权
1.要远程连接mysql,还要在云服务器控制台防火墙中开放3306端口。
2.执行以下代码,授权mysql远程登录。
docker exec -it mysql bash
mysql -uroot -p
#输入密码
#进入到mysql
use mysql;
select host, user, authentication_string, plugin from user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
(设置远程登录密码123456,密码别设置的太简单,否则知道你服务器ip就随便登录你的mysql了)
// 设置远程连接权限
grant all on *.* to 'root'@'%';
//刷新权限
flush privileges;
2.3 远程连接mysql
操作见ubuntu安装mysql并使用datagrip远程连接_ubuntu datagrip-优快云博客
3.部署后端
3.1导入准备好的hmall
利用maven打成jar包
3.2 上传服务器
将dockerfile和刚刚打好的jar包上传到root目录下
3.3 构建镜像
命令:
docker build -t hmall .
命令解释见Docs
3.4 自定义网络
常见命令:
命令 | 说明 | 文档地址 |
---|---|---|
docker network create | 创建一个网络 | docker network create |
docker network ls | 查看所有网络 | docs.docker.com |
docker network rm | 删除指定网络 | docs.docker.com |
docker network prune | 清除未使用的网络 | docs.docker.com |
docker network connect | 使指定容器连接加入某网络 | docs.docker.com |
docker network disconnect | 使指定容器连接离开某网络 | docker network disconnect |
docker network inspect | 查看网络详细信息 | docker network inspect |
3.4.1 步骤
#创建网络
docker network create hmall
#将mysql加入hmall网络
docker network connect hmall mysql
#查看mysql容器,检查是否加入成功
docker inspect mysql
3.4 运行容器
#创建并运行容器,并通过--network将其加入hmall网络,这样才能通过容器名访问mysql
docker run -d --name hmall --network hmall -p 8080:8080 hmall
#查看容器是否启动成功,查看所有容器
docker ps
#查看hmall日志
docker logs -f hmall
成功部署截图