- 1.什么是Docker
- 2.Docker 容器的安装
- 3.镜像的构建
- 修改容器后的数据保存
- 方法一
- 方法二
- Dockerfile 详解
- 用Dockerfile 写nginx 镜像
2.Docker 容器的安装Docker 是管理容器的引擎
Docker 为应用打包、部署平台,而非单纯的虚拟化技术
传统虚拟机 与 容器 技术对比
3.镜像的构建wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装yum源 放到/etc/yum.repos.d/ 目录里
编辑 此文件 没用的删除 vim
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/ $basearch/stable
enabled=1
gpgcheck=0
安装centos源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
并修改
安装 Docker -ce 并启动docker info 查看信息
出现警告解决办法 编写.conf文件 sysctl --system使之生效
docker pull ubuntu 拉取镜像
修改容器后的数据保存 方法一
docker run -d --name demo -p 80:80 ubuntu 运行容器
docker images 查看所有镜像信息
docker rmi yakexi007/mario 删除镜像
docker run -it --rm ubuntu 交互式运行
docker rm -f demo 删除容器
docker inspect nginx 查看镜像详情信息
docker commit 从容器创建镜像
docker build 从 Dockerfile构建镜像
docker search 搜索镜像
docker history 查看镜像构建历史
方法二
ctrl +q+p
docker commit -m “add files” e289c8d58f1d ubuntu:v1 保存到了 v1 镜像 原来镜像不变 修改后的 数据 另存镜像
此方法 不显示修改内容 不建议使用创建 目录 并且创建名为 Dockerfile 的文件 编辑
Dockerfile 详解
docker build -t ubuntu:v2 . 构建 -t 指定镜像名称
每一层干了什么 都明确写出 建议使用这个保存方法常用指令
用Dockerfile 写nginx 镜像
FROM 指定base 镜像如果不存在 会从远程仓库下载
MAINTAINER 设置镜像的作者 比如邮箱等
COPY 复制当前目录的文件 到 镜像
ADD 被指定的文件会自动 归档解压
ENV 指定变量
EXPOSE 暴露端口指定端口
VOLUME 数据卷挂载 可以 把 镜像中的文件 挂载到真实机 /var/lib/docker/volumes 目录底下一个随机文件名的data 下面
WORKDIR 相当于shell中的 cd命令 进入 目录 如果目录不存在 会自动创建
RUN 在容器中运行命令 通常 用于安装 复制 install cp
CMD 与 ENTRYPOINT 都是设置容器启动后执行的命令 CMD会被 docker run命令后跟的命令覆盖,ENTRYPOINT不会 ,这个命令后有两种写法 ①echo “hello,$ name"②[”/bin/echo",“-c”“hello,$ name”]
编写Dockerfile 内容
FROM centos:7
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc
RUN yum install -y pcre-devel
RUN yum install -y openssl-devel
RUN yum install -y make
RUN ./configure --with-http_stub_status_module --with-http_ssl_module
RUN make
RUN make install
EXPOSE 80
CMD [“/usr/local/nginx/sbin/nginx”, “-g”, “daemon off;”]
完成后 比较大 进行优化 修改Dockerfile 进行优化
FROM centos:7 as build
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc pcre-devel openssl-devel make && sed -i ‘s/CFLAGS=" $ CFLAGS -g"/#CFLAGS=“$ CFLAGS -g”/g’ auto/cc/gcc && ./configure --with-http_stub_status_module --with-http_ssl_module && make && make install && rm -fr /mnt/nginx-1.21.6 && yum remove -y gcc make && yum clean all
FROM centos:7
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
CMD [“/usr/local/nginx/sbin/nginx”, “-g”, “daemon off;”]
利用谷歌的 容器工具 来完成 更小优化 编辑Dockerfile
FROM nginx:latest as base
#https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG TIME_ZONE
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 /usr/lib/x86_64-linux-gnu/libpcre* /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-debian11
COPY --from=base /opt /
EXPOSE 80 443
ENTRYPOINT [“nginx”, “-g”, “daemon off;”]
优化完成



