Docker构建自定义镜像
传统的 项目部署 方案非常麻烦,一台新的Linux系统,我们需要安装JDK,MySQL,Tomcat,Nginx等软件,然后将项目代码编译发布到服务器。
如果需要部署到多台服务器的话,同样的工作需要重复很多次。
利用Docker构建自定义的镜像,在镜像里装上项目需要的所有东西,每次部署只需要通过镜像创建一个容器运行即可,做到 一劳永逸。
安装docker
Docker 要求 CentOS 系统的内核版本高于 3.10,推荐使用CentOS7 安装。
$ uname -r
3.10.0-957.el7.x86_64
1、先卸载旧的,以免影响安装。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2、安装必要的系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
3、添加阿里源,加速下载
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、更新 yum 缓存
yum makecache fast
5、安装 Docker-ce
yum -y install docker-ce
6、启动Docker服务
systemctl start docker
镜像加速
$ vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
构建自定义镜像
项目一般部署在Linux环境下,所以使用 CentOS 作为基础镜像。
然后在上面做项目的部署工作,最后生成完整的项目镜像。
创建容器
1、拉取 CentOS
docker pull centos
2、创建容器并运行
用 CentOS 镜像创建名为“app”的容器,将容器内部的80、8080、3306端口映射到宿主机。
docker run --name app -dit -p 8080:8080 -p 80:80 -p 3306:3306 centos
部署项目
可以把“app”容器看作是一台干净的Linux服务器环境。
按照正常部署的步骤,在容器中部署项目。
Tips:由于centos镜像是极简的环境,很多常用的依赖里面都没有,在安装一些软件时很可能出各种问题,不会像平时部署的那么顺利。
1、进入容器
容器和宿主机是隔离的,要想在容器中安装项目,必须先进入到容器。
docker attach app
由于环境是隔离的,需要将软件的安装包统一拷贝到容器中,再进入容器进行安装。
2、安装MySQL
-- 官网下载安装包,拷贝到容器
docker cp mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz app:/root/app/
-- 创建用户和组
groupadd mysql
useradd -r -g mysql mysql
-- 赋予文件夹权限
chown -R mysql:mysql ./
-- 拷贝配置文件到/etc下
cp support-files/my-default.cnf /etc/my.cnf
-- 安装MysQL
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
-- 启动服务
./support-files/mysql.server start
安装MysQL时会遇到很多问题,大多是:依赖不存在。
yum -y install perl perl-devel
yum install libaio-devel.x86_64
yum -y install numactl
yum install libncurses.so.5
ln -s /lib64/libncurses.so.6 /lib64/libncurses.so.5
ln -s /lib64/libtinfo.so.6 /lib64/libtinfo.so.5
3、安装Nginx
-- 下载nginx安装包,拷贝到容器
-- 先安装依赖
yum install gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum install -y openssl openssl-devel
-- 安装
./configure
make && make install
将前端代码部署到Nginx中。
4、安装JDK
5、安装tomcat
将后端代码编译好放到tomcat中。
将需要的服务设为 开机自启。
环境测试
启动所有的服务,通过宿主机的相应端口访问服务,看能否正常运行。
没问题的话,就可以 构建镜像了。
构建镜像
-- docker commit 容器ID/名称 镜像名:版本号
docker commit app myapp:1.0
构建成功后,查看镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myapp 1.0 cbb08823ab8b 8 seconds ago 4.13GB
centos latest 0f3e07c0138f 9 days ago 220MB
生产环境部署的时候,直接用 myapp 镜像即可。
运行环境、项目代码全部在里面了。
镜像文件导入导出
在本地构建好镜像后,还需要将镜像导出到文件,以便在其他地方使用。
毕竟构建镜像的目的就是:一次构建,到处运行。
除了导出镜像到文件外,还可以直接发布镜像,供更多人使用。
不过公司的项目肯定不能发布了,所以这里记录文件的导出步骤。
导出
-- docker save -o 导出目录 镜像名称:版本号
docker save -o ~/app.tar.gz myapp:1.0
导入
docker load -i ~/app.tar.gz
生产环境使用
有了镜像之后,部署就变得非常简单了。
- 在服务器安装Docker
- 导入镜像
- 创建镜像容器并运行
推荐阅读
-
详解Maven Docker镜像使用技巧
-
使用Docker来加速构建Android应用的基本部署思路解析
-
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码
-
浅谈使用Maven插件构建Docker镜像的方法
-
详解Maven Docker镜像使用技巧
-
spring boot利用docker构建gradle项目的实现步骤
-
spring Boot 应用通过Docker 来实现构建、运行、发布流程
-
使用 Vue cli 3.0 构建自定义组件库的方法
-
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码
-
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法