0
点赞
收藏
分享

微信扫一扫

Linux企业运维##Docker(一) 安装部署与镜像构建、优化

敬亭阁主 2022-01-05 阅读 81

目录

Docker简介

一、Docker安装及简单使用

二、Docker镜像的构建

1.构建方法一(手动添加镜像)

2.构建方法二(Dockerfile文件方式导入镜像)

三、Dockerfile详解

四、镜像封装及优化

1.Docker封装centos+nginx镜像实例

2.镜像优化

v2版本镜像:减少镜像层数,合并所有RUN指令,清理镜像构建的中间产物包括编译好的安装包和缓存/mnt/nginx-1.20.2

v3版本镜像:使用多阶段构建镜像

v4版本镜像:选择最精简的基础镜像替换原有的centos


Docker简介

Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术。容器不需要提前封装虚拟机,它共享宿主机,可以理解为宿主机上的一个进程。
对于开发人员:一次构建可以在任何地方运行;
对于运维人员:一次配置可以运行任何东西。
容器仍属于C/S结构,由镜像创建,本地有镜像直接创建,本地无镜像从官方软件仓库下载。
在这里插入图片描述

一、Docker安装及简单使用

(1)新建虚拟机test1

(2)配置docker软件源(使用阿里巴巴镜像站)

cd /etc/yum.repos.d/
curl https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o docker-ce.repo

vim docker-ce.repo    

修改内容如下

查看

(3)设置依赖包安装源

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

vim CentOS-Base.repo   

修改内容如下 

(4)安装并启动docker-ce(社区版本),激活参数值为1

yum install docker-ce.x86_64 -y

systemctl enable --now docker
cd /etc/docker
docker info

此时可看到两条warning

 

参数值此时为0,需设置为1

sysctl -a | grep bridge-nf-call-iptables

vim /etc/sysctl.d/docker.conf

设置内容如下  

sysctl --system    ##刷新内核文件,读取添加的文件

(5) 在docker中搜索并拉取2048游戏,指定容器端口并运行(-d打入后台),此时在浏览器输入test1的IP可以进入到2048游戏界面

docker search yakexi007
docker pull yakexi007/game2048
docker run -d --name demo -p 80:80 yakexi007/game2048

 

(6) 结束当前运行的容器

docker ps     ##显示当前正在运行的容器
docker rm -f demo     #强制删除正在运行的容器
docker ps -a  ##显示所有状态的容器

二、Docker镜像的构建

镜像的分层结构:base image提供了根文件系统,所有容器数据都分类存放在/var/lib/docker目录中,可以共享资源,减少网络带宽资源占用

1.构建方法一(手动添加镜像)

(1)搜索并拉取busybox镜像

docker search busybox
docker pull busybox
docker images

(2)运行busybox

docker run -it --name demo busybox  ##拉起容器busybox,-i表示交互式,-t表示打开伪终端

(3)在busybox中新建3个文件

(4)ctrl+P+Q将进程打入后台继续运行

  ctrl+d或exit退出并关闭运行的交互式容器,ctrl+P+Q可将运行的交互式容器打入后台

(5)将demo容器提交保存为demo:v1新的镜像,查看比较busybox和demo:v1可以看到demo:v1是在busybox镜像的基础上新加了一层

docker commit demo demo:v1    ##将demo容器提交保存为新镜像demo:v1

docker history demo:v1     ##查看demo:v1的分层结构
docker history busybox     ##查看busybox的分层结构

(6)删除demo:v1镜像,查看busybox可以看到busybox镜像无变化,仍为原来的两层

docker rmi demo:v1        ##删除demo:v1镜像
docker history demo:v1
docker history busybox

对比层级结构查看可发现,手动添加的镜像没有解释每一层的作用

解决方法:Dockerfile文件方式导入镜像v2,history可以查看具体内容,容器用busybox(见构建方法2)

2.构建方法二(Dockerfile文件方式导入镜像)

  • dockerfile有审计功能,每新加一层镜像都会有动作审计说明
  • dockerfile不能放在根下,否则会把根下所有数据发送给docker引擎

(1)创建docker目录,在目录中建立编辑dockerfile

mkdir docker
cd docker/
vim Dockerfile

 

编辑Dockerfile如下 

(2)使用dockerfile创建一个demo:v2新的镜像 

(3)运行容器demo:v2,可看到file123已经创建

(4)查看镜像的分层结构,此时可以看到层级操作的具体操作解释

docker history demo:v2

三、Dockerfile详解

FROM busybox  #镜像来源
RUN echo westos > testfile # RUN后跟shell运行语句
RUN echo hello > testfile1
COPY index.html / #COPY拷贝当前目录的index.html到容器的根目录下
ADD nginx-1.20.1.tar.gz / #ADD 解压tar包到根目录下
ENV HOSTNAME server1 #ENV 定义变量HOSTNAME为server1
EXPOSE 80 #设定端口为80
VOLUME {"/data"} #挂载目录为/data
WORKDIR /data #工作空间为 /data
ENTRYPOINT ["/bin/echo", "hello"] #强制输出不被覆盖
CMD ["world"] #输出会覆盖

四、镜像封装及优化

1.Docker封装centos+nginx镜像实例

(1)拉取centos镜像,相当于使用centos的内核

docker pull centos

可看到centos镜像大小为231MB

(2)编写Dockerfile创建镜像

cd /docker/
vim Dockerfile


FROM centos                        ##镜像来源
RUN rm -f /etc/yum.repos.d/*.repo    ##删除原yum源
COPY CentOS-Base.repo /etc/yum.repos.d/    ##从当前目录下拷贝新yum源到镜像中
RUN yum install -y gcc pcre-devel openssl-devel make   ##安装依赖包,编译器等
ADD nginx-1.20.2.tar.gz /mnt               ##将nginx解压到镜像中的mnt下
WORKDIR /mnt/nginx-1.20.2                  ##进入mnt目录
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc   ##将debug注释掉
RUN ./configure --with-http_ssl_module
RUN make
RUN make install                   ##编译及安装
EXPOSE 80                          ##镜像使用80端口
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

其中yum源使用的是阿里云 

(3)通过Dockerfile建立镜像v1,执行命令创建镜像webserver:v1

docker build -t webserver:v1 .

 (4)拉起容器并设置进程名为demo

docker run -d --name demo webserver:v1

 (5)查看demo进程/容器信息

docker inspect demo

可看到分配给nginx的ip地址

测试访问可访问到nginx主页

 

2.镜像优化

主要优化途径包括:

  • 清理镜像构建的中间产物
  • 选择最精简的基础镜像
  • 减少镜像的层数
  • 尽量去用构建缓存
  • 使用多阶段构建镜像
  • 注意优化网络请求

v2版本镜像:减少镜像层数,合并所有RUN指令,清理镜像构建的中间产物包括编译好的安装包和缓存/mnt/nginx-1.20.2

(1)修改Dockerfile

vim Dockerfile

(2)建立镜像v2,执行命令创建镜像webserver:v2 

docker build -t webserver:v2 .

(3)查看镜像大小

 可看到v2版本比v1版本仅小了1M

v3版本镜像:使用多阶段构建镜像

(1)修改Dockerfile

vim Dockerfile

(2) 建立镜像v3,执行命令创建镜像webserver:v3

docker build -t webserver:v3 .

(3)查看镜像大小

可看到v3版本的镜像大小仅为232M

v4版本镜像:选择最精简的基础镜像替换原有的centos

(1)上传base-debian10压缩包,为其创建镜像

(2)修改Dockerfile

(3)由于使用的是1.18版本的nginx,故还需执行命令

docker pull nginx:1.18

拉取1.18版本的nginx镜像,执行结果如下

(4)建立镜像v2,执行命令创建镜像webserver:v2 

docker build -t webserver:v4 .

(5)查看镜像大小

 可看到v4版本镜像大小仅为31.7MB

(6)拉起容器并设置进程名为demo

docker run -d --name demo webserver:v4

(7) 查看demo进程/容器信息

docker inspect demo

可看到分配给nginx的ip地址

测试访问可访问到nginx主页

 

举报

相关推荐

0 条评论