欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker构建自定义镜像

程序员文章站 2022-06-03 14:39:02
...

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

生产环境使用

有了镜像之后,部署就变得非常简单了。

  1. 在服务器安装Docker
  2. 导入镜像
  3. 创建镜像容器并运行
相关标签: docker 镜像