1.Docker(安装部署、Dockerfile镜像优化、仓库搭建)
Docker是一个基于Go语言的,开源的应用容器引擎,是一个用于开发,交付和运行应用程序的开放平台。Docker使得应用程序与基础架构分开来,进而实现快速交付。其作用包括:可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制(沙箱就是一个限制应用程序对系统资源的访问的运行环境,通常实现在虚拟机中),更重
Docker是一个基于Go语言的,开源的应用容器引擎,是一个用于开发,交付和运行应用程序的开放平台。Docker使得应用程序与基础架构分开来,进而实现快速交付。
其作用包括:可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制(沙箱就是一个限制应用程序对系统资源的访问的运行环境,通常实现在虚拟机中),更重要的是容器性能开销极低。
一、Docker安装部署
环境介绍:一台全新的rhel7.6虚拟机,火墙和selinux均处于关闭状态。
安装docker-ce,启动服务yum install -y docker-ce
docker服务开启自动添加docker ip
将2048游戏镜像添加到docker中 上传镜像docker load -i game2048.tar
查看已经添加的镜像docker images
运行容器 –name表示名称为demo 端口为真实主机的80映射到虚拟机的80端口,-d表示打入后台
docker run -d --name demo -p 80:8080 mario
二、镜像的构建
注意:ctrl+p+q 将运行的交互式容器打入后台
上传busybox镜像到dockerdocker load -i busybox.tar
拉起容器busybox,-i表示交互式,-t表示打开伪终端docker run -it --name demo busybox
查看镜像docker images
docker ps -a查看所有进程
启动已有容器docker start demo
进入已存在的demo容器中docker container attach demo
上传新的镜像,源于demo容器 demo:v1 docker commit demo demo:v1
对比查看两者层级结构
删除容器docker rmi demo:v1
重启读取v1中的内容
删掉demo后,不影响v1容器
对比层级结构查看,手动添加的容器没有解释每一层的作用,game2048里会对
Dockerfile文件方式导入镜像v2,history可以查看具体内容,容器用busybox
mkdir docker cd docker/ vim Dockerfilecat Dockerfile
在当前目录文件Dockerfile下创建镜像docker build -t demo:v2 .
三、Dockerfile详解
vim Dockerfile
创建容器
docker run -it --rm demo:v5 westos–rm表示执行后丢弃,不保存cache
四、镜像构建- -nginx
导入rhel7镜像,相当于使用rhel7的内核 docker load -i rhel7.tar编写
通过Dockerfile建立镜像v1,执行命令创建镜像rhel7:v1
docker build it rhel7:v1
拉起容器,进程名为demo,docker run -d --name demo rhel7:v1
查demo进程/容器信息docker inspect demo
五、镜像优化
清理镜像构建的中间产物
选择最精简的基础镜像
减少镜像的层数
尽量去用构建缓存
使用多阶段构建镜像
注意优化网络请求**
v2镜像:减少镜像层数,合并所有RUN指令,清理镜像构建的中间产物包括编译好的安装包和缓存/mnt/nginx-1.20.1 /var/cache/*
cat Dockerfile
FROM rhel7
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.20.1.tar.gz /mnt
WORKDIR /mnt/nginx-1.20.1
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make && sed -i ‘s/CFLAGS=“KaTeX parse error: Expected 'EOF', got '#' at position 12: CFLAGS -g"/#̲CFLAGS="CFLAGS -g”/g’ auto/cc/gcc && ./configure &> /dev/null && make &> /dev/null && make install &> /dev/null && rm -fr /mnt/nginx-1.20.1 /var/cache/*
CMD ["/usr/local/nginx/sbin/nginx", “-g”, “daemon off;”]
创建镜像v2docker build -t rhel7:v2 .
v3:尽量去用构建缓存,使用多阶段构建镜像
cat Dockerfile
FROM rhel7 as build
EXPOSE 80
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.20.1.tar.gz /mnt
WORKDIR /mnt/nginx-1.20.1
RUN rpmdb --rebuilddb && yum install -y gcc pcre-devel zlib-devel make && sed -i ‘s/CFLAGS=“KaTeX parse error: Expected 'EOF', got '#' at position 12: CFLAGS -g"/#̲CFLAGS="CFLAGS -g”/g’ auto/cc/gcc && ./configure &> /dev/null && make &> /dev/null && make install &> /dev/null && rm -fr /mnt/nginx-1.20.1 /var/cache/*
FROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx", “-g”, “daemon off;”]
docker build -t rhel7:v3
v4:选择最精简的基础镜像替换原有的rhel7cat /new/Dockerfile
docker build -t rhel7:v4 .
docker images rhel7 查看效果
六、本地私有仓库搭建
镜像改名
标记原有镜像rhel7:v4 为新镜像demo:latestdocker tag rhel7:v4 demo:latest
准备好搭建本地仓库的软件tegistry
docker pull registry
启动本低仓库,-v表示本地 /opt/ 映射容器中的 /var/lib ,端口映射为5000
docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry
将容器中的game2048镜像标记到本地仓库中
docker tag game2048:latest localhost:5000/game2048:latest
推行上传
上传成功后本地路径中也产生了文件ls /opt/registry/
删除之后,重新加载,之前的内容依然存在
docker rm -f registry
docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry
更多推荐
所有评论(0)