Docker安装
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包:yum makecache fast
3.安装Docker
最后,执行命令,安装Docker
yum install docker-ce docker-ce-cli containerd.io
4.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
进入容器:docker exec -it b28289c7c5e1 /bin/bash
5.配置镜像加速器
Docker使用
安装mysql
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=Mm502986 \ mysql
重启和设置自启动
sudo docker restart mysql
sudo docker update mysql --restart=always
然后就可以连接数据库了!
常见命令
进入容器:docker exec -it mysql bash
数据卷
所以只需要修改宿主机的文件,容器内的文件就可以改变。宿主文件位置是固定不变的。
例子:
创建容器是挂载 容器内的目录
然后通过inspect查看数据卷,可以看到对应的宿主目录
修改主目录的文件,即可以修改对应的容器文件。
指定本地目录挂载:
自定义镜像
即把自己的java应用,定义成镜像部署到docker容器中。
镜像结构是分层的,有一些已经拉取过的基础镜像就不用拉取了,节省空间。
镜像文件:
这些指令不需要记,能看懂就行
直接把所有的都基于别人的基础镜像
创建镜像:
实例:
Dockerfile文件:
把domo文件和jdk基础镜像都上传好:
加载底层基础镜像:
创建容器镜像
运行我们的应用镜像:
然后浏览器访问成功:
网络
让容器在同一个网络中,这样就可以相互访问
创建一个网络
把mysql容器加入到这个网络中:
此时mysql有两个网络,一个是默认的
创建容器的时候就加入网络:
部署Java应用
1、项目打包
2、把jar包和Dockerfile一起放到虚拟机中
3、创建镜像
4、启动应用
docker run -d --name hm -p 8080:8080 --network heima hmall
部署前端
1、把静态资源和配置文件上传服务器
2、创建nginx容器并完成挂载
注意后端应用、nginx和mysql这三个容器都要在一个网络
DockerCompose
前面的步骤,需要自己一个一个的部署,比较麻烦
能够自动创建应用和运行
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