Docker构建自定义镜像

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_32099833/article/details/102530924

image

传统的 项目部署 方案非常麻烦,一台新的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. 创建镜像容器并运行

猜你喜欢

转载自blog.csdn.net/qq_32099833/article/details/102530924