Docker的安装和使用及镜像

Docker

  • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的安装

  1. 修改镜像源仓库,指向阿里镜像源(确保虚拟机能够上网)
[rhel7.6]
name=rhel7.6
baseurl=http://172.25.3.250/rhel7.6
gpgcheck=0

[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
enabled=1

需要解决依赖性: container-selinux-2.77-1.el7.noarch.rpm提取码: etqw

yum install docker-ce container-selinux-2.77-1.el7.noarch.rpm -y 下载安装,并开启服务 systemctl enable --now docker.service ,
docker info 查看docker的详细信息

  1. 生成一个配置文件 vim /etc/sysctl.d/docker.conf
[root@server3 ~]# cat /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
  1. 添加docker 镜像加速器 ,使拉取镜像的速度变快,添加之后要重启服务
[root@server3 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://ysuglhfo.mirror.aliyuncs.com"]
}

Docker 的基本命令

常用的命令

命令作用
docker search nginx查询nginx
docker pull nginx拉取镜像
docker history nginx查看nginx包含的镜像层
docker images查看系统中所有的镜像
docker ps查看正在运行的进程, -a 参数是显示所有的进程
docker rmi 镜像名称删除指定镜像
docker rm 容器删除指定的容器
docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像
docker load -i rhel7.tar用load可以加载本地的镜像
docker inspect 容器名称查看指定容器的详细信息
docker history 镜像名称查看指定镜像构造容器所经历的镜像层

快捷键<ctrl> + <p> +<q> 将该进程打入后台

docker run 命令的常用参数

参数作用
-d后台运行
-it分配一个终端
--rm多用于busybox镜像,当退出busybox时,就自动删除该docker 进程
--name对调用该镜像形成的进程起一个别名,如果不加该参数系统会自动生成一个别名
-v用于做容器和宿主机的数据目录挂载,“ : ” 之前的是宿主机的目录或者是数据卷,“:” 之后的是容器内的目录路径(可以是文件)
-p端口映射,外网主机可以通过宿主机的端口,来访问容器里的内容

常用命令可以访问 docker常用命令

Docker的常用使用方法

Docker 拉取

  1. docker search nginx查询有关nginx的镜像
    在这里插入图片描述
  1. docker pull nginx 拉取nginx镜像
    在这里插入图片描述
  2. docker images 显示系统中所有的镜像
    在这里插入图片描述
  1. docker history nginx 查看nginx包含的镜像层
    在这里插入图片描述
  2. 调用镜像并运行
    在这里插入图片描述
    加了端口映射之后,外网可以通过访问宿主机的端口来获取容器内的内容在这里插入图片描述

连接到指定容器

当前运行的两个容器
在这里插入图片描述
连接的两种方式
在这里插入图片描述

Docker 加载本地镜像和生成本地镜像的tar包

  • 生成本地镜像的tar包,适合宿主机没有网络用
    在这里插入图片描述

  • 从本地的tar 包加载镜像
    在这里插入图片描述

生成镜像

docker commit 生成

docker commit命令将容器的可读写层转换为一个只读层,这样就把一个容器转换成了不可变的镜像。

  1. 打开一个容器
    在这里插入图片描述
  2. 生成一个镜像
    在这里插入图片描述
    在这里插入图片描述

docker file方法生成镜像

Dockerfile常用指令
指令作用
FROM指定base镜像,如果本地不存在会从远程仓库下载
MAINTAINER设置镜像的作者,比如用户邮箱等
COPY把文件从build context复制到镜像,支持两种形式:COPY src dest 和 COPY [“src”, “dest”], src文件是在执行docker build -t 命令当前目录的文件或者目录
ADD用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像:
ENV设置环境变量,变量可以被后续的指令使用:
EXPOSE如果容器中运行应用服务,可以把服务端口暴露出去: EXPOSE 80
VOLUME申明数据卷,通常指定的是应用的数据挂载点: VOLUME ["/var/www/html"]
WORKDIR为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建
RUN在容器中运行命令并创建新的镜像层,常用于安装软件包:RUN yum install -y vim
CMD 与 ENTRYPOINT这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。
实现nginx服务镜像的步骤

rhel7基础镜像:rhel7基础镜像 提取码: 8wku
nginx 1.19.4源码包:nginx1.19.4提取码: mic2
实现步骤:

  1. 将rhel7.tar 导入到本地镜像中 docker load -i rhel7.tar
    在这里插入图片描述
  1. 建立一个目录daemon,该目录下放有nginx源码包和yum仓库配置文件,并创建一个Dockerfile文件,文件的内容如下
[root@server3 daemom]# cat westos.repo 
[rhel7.6]
name=rhel7.6
baseurl=http://172.25.3.250/rhel7.6
gpgcheck=0

Dockerfile文件

[root@server3 daemom]# cat Dockerfile 
FROM rhel7
COPY westos.repo /etc/yum.repos.d/
ADD nginx-1.19.4.tar.gz /mnt/
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
WORKDIR /mnt/nginx-1.19.4/
RUN rpmdb --rebuilddb
RUN yum install -y gcc make pcre-devel zlib-devel
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
  1. docker build -t demo:v3 . 生成镜像文件
    docker history demo:v3 查看该镜像在运行时,经历过的镜像层
    在这里插入图片描述
    通过生成的镜像文件生成容器
    docker run -d -it --name demo1 -p 80:80 -v webdata:/usr/local/nginx/html demo:v3
    注: 如果不加-v 参数,则会自动的在宿主机的/var/lib/docker/volumes生成一个目录,并将挂载到容器里的 数据卷上.
    docker inspect demo1 查看该容器的详细信息,
    创建测试页并测试:
    在这里插入图片描述

镜像的优化

优化方法

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

优化后的Dockerfile

  • 没有采用base基础包,使用rhel7
[root@server3 daemom]# cat Dockerfile 
FROM rhel7 as build
COPY westos.repo /etc/yum.repos.d/
ADD nginx-1.19.4.tar.gz /mnt
WORKDIR /mnt/nginx-1.19.4
RUN rpmdb --rebuilddb && yum install -y gcc make pcre-devel zlib-devel && sed -i 's/CFLS="$CFLAGS -g"/#CFLAGS ="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install && rm -fr /var/cache/* && rm -fr /mnt/nginx-1.19.4


FROM rhel7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
  • 采用base包
[root@server3 test]# cat Dockerfile 
FROM nginx:latest as base
RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base-debian10
COPY --from=base /opt /
EXPOSE 80 
ENTRYPOINT ["nginx", "-g", "daemon off;"]

差距:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值