CentoOS7系统下使用DockerFile构建镜像
具体操作流程
日常工作中,需要将应用或微服务构建为Docker镜像,下面根据自己的经验,整理如下文档。构建镜像主要依赖一下环境及服务,Docker服务、docker-compose、dockerfile镜像构建。
一、Docker环境安装部署
首先介绍下Docker的版本,分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 是社区免费版;
Docker EE 即企业版,强调安全,但需付费使用。
Docker 官方建议要 CentOS7.0 及以上系统版本,本文介绍 Docker CE 在CentOS下的安装使用。
1、检查Centos7系统内核版本
建议系统内核版 >=2.6.32-431,因为这些内核包含了运行Docker的一些特定修改。
// 在命令提示符下输入
[root@localhost/] uname -r
2、检查CentOS是否使用Device Mapper作为存储驱动
// 在命令提示符下输入
[root@localhost/] ls -l /sys/class/misc/device-mapper
注意:如果没有检测到Device Mapper,需要安装device-mapper软件包:
安装软件包:
// 在命令提示符下输入
[root@localhost/] sudo yum install -y device-mapper
加载dm_mod内核模块:
// 在命令提示符下输入
[root@localhost/] sudo modprobe dm_mod
3、如果之前安装过Docker服务,则需卸载历史版本
// 在命令提示符下输入
[root@localhost/] yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
4、安装Docker依赖包
// 安装GCC
[root@localhost/] yum -y install gcc
// 安装GCC-C++
[root@localhost/] yum -y install gcc-c++
// 安装lvm2
[root@localhost/] yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里镜像仓库
[root@localhost/] yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
[root@localhost/] yum makecache fast
5、安装Docker核心服务最新版本
[root@localhost/] yum install docker-ce docker-ce-cli containerd.io
//启动docker 服务
[root@localhost/] systemctl start docker
//验证Docker服务是否安装成功
[root@localhost/] systemctl status docker
显示下列信息,即Docker服务安装成功
注意:可以将Docker服务修改为开机自启动服务:
//设置Docker服务为开机自启动
[root@localhost/] systemctl enable docker
二、基于Dockerfile构建镜像
docker镜像分层管理的,假如使用某个镜像启动为容器,而在容器中又增加了程序服务或数据文件。再将container容器提交保存为镜像,久而久之具体对镜像增加了那些服务于文件不便于管理。
使用Dockerfile构建镜像文件,清楚的记录了镜像增加了那些服务于文件便于后期维护管理。
1、先来看下DockerFile镜像构建文件的格式
//设置Docker服务为开机自启动
FROM centos
MAINTAINER baidu 123@qq.com
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.8.tar.gz /usr/src/
RUN cd /usr/src/nginx-1.15.8 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
&& nginx
RUN rm -rf /usr/src/nginx-nginx-1.15.8
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2、DockerFile的常用命令
类型 | 命令 |
---|---|
基础镜像信息 | FROM |
维护者信息 | MAINTAINER |
镜像操作指令 | RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等 |
容器启动时执行指令 | CMD、ENTRYPOINT |
3、在DockerFile的文件目录下构建镜像
首先将需要打入镜像的应用系统拷贝的当前目录下。
例如:拷贝至当前目录DotNetCoreTest
//简单DockerFile文件格式
FROM microsoft/dotnet:2.2-aspnetcore-runtime #基础镜像名称
MAINTAINER abc 123@qq.com #作者信息
WORKDIR /usr/local/nginx #软件工作目录
EXPOSE 6001 #对外开放端口
COPY ./DotNetCoreTest . #需要将应用系统的文件拷贝至镜像中
CMD ["dotnet", "netcoreTest.dll"] #镜像启动时执行启动应用服务
在Dockerfile文件的目录下,执行镜像构建命令。构建命令会自动拉取基础镜像,然后根据每条命令叠加镜像分层文件,最终生成镜像。
docker build 镜像构建命令
-t 指定仓库名称与镜像名称 jf/jf-exvit:v4.00.20201201
。生成的镜像自动到本地镜像目录
//构建镜像
[root@localhost/] docker build -t jf/jf-exvit:v4.00.20201201 .
4、查看构建的镜像
//查看镜像
[root@localhost/] docker images
三、Docker-Compose安装部署
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用,简单说就是容器管理组件。
1、下载docker-compose文件
//下载docker-compose
[root@localhost/] curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、检查docker-compose是否安装成功
//下载docker-compose
[root@localhost/] 运行docker-compose --version
3、docker-compose编排模板
version: '3.0' # docker 的版本
services: # 配置的容器列表
CONTAINER_NAME: # 容器的名称
image: BASE_IMAGE # 这个一个容器的基础镜像
ports: # 你的容器需不需要做端口映射
- "host_port:container_port"
volumes: # 数据卷配置
- host_dir:container_dir
environment: # 环境变量(map 的配置方式 key: value)
PARAM: VALUE
environments: # 环境变量(数组的配置方式 - key=value)
- PARAM=VALUE
restart: always # 容器的重启策略
dns: # dns 的配置
- 8.8.8.8
4、使用docker-compse启动容器,并且为后台运行
//下载docker-compose
[root@localhost/] docker-compose up -d
注意:docker-compose 命令的执行目录,必须与docker-compose 文件在同级目录,否则会提示找不到文件
四、导出导入命令
1、save镜像导出命令 docker save [options] images [images…]
例如:
docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
2、load镜像导入命令 docker load [options]
例如:
docker load -i nginx.tar
或
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
五、Docker常用命令
- 查看镜像列表
docker images - 下载镜像
docker pull centos - 基于镜像启动容器
docker run centos echo “hello word” - 进入已经运行的容器中
docker exec -it [容器名称/ID] bash - 查看启动的容器列表
docker ps - 查看所有容器,包括未启动成功或停止的
docker ps -a - 使用镜像直接启动为容器
docker run -d --name=ubuntu_server -p 80:80 -v /etc/www:/var/www ubuntu:latest
参考内容
安装部署是参考了【Docker–安装部署】
Docker-Compose文档
[1]: https://www.cnblogs.com/caoweixiong/p/12186736.html
[2]: https://docs.docker.com/compose/