关于javascript:Docker-实战教程之从入门到提高-四

4次阅读

共计 3001 个字符,预计需要花费 8 分钟才能阅读完成。

本系列的前三篇文章,咱们学习了如何在 Ubuntu 操作系统装置 Docker,并且通过实战练习,理解了 Docker 和宿主机操作系统文件目录相互隔离的实现原理,以及 Docker Volume 的工作原理。通过入手对 Nginx Docker 镜像进行批改,达到自定义其首页显示的目标。

  • Docker 实战教程之从入门到进步 (一)
  • Docker 实战教程之从入门到进步 (二)
  • Docker 实战教程之从入门到进步 (三)

其中系列的第三篇文章,蕴含了应用 Dockerfile 基于已有的 Nginx 镜像制作一个反对 SSL 拜访的 Nginx Docker 镜像的步骤。

本文持续咱们的 Docker 学习之路。

练习 1:从头基于空镜像 scratch 创立一个新的 Docker 镜像

咱们在应用 Dockerfile 构建 docker 镜像时,一种形式是应用官网事后配置好的容器镜像。长处是咱们不必从头开始构建,节俭了很多工作量,但付出的代价是须要下载很大的镜像包。
比方我机器上 docker images 返回的这些基于 nginx 的镜像,每个都超过了 100MB,而一个简略的 Ubuntu 的容器超过了 200MB,如果装置了相干的软件,尺寸会更大。

如果咱们的需要是在构建一个合乎咱们理论业务需要的 Docker 镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?

思路是应用空镜像 scratch.

新建一个文件夹,用 wget 下载 rootfs.tar.xz 压缩包。

wget -O rootfs.tar.xz https://github.com/debuerreot…

这个将近 30MB 的压缩包是个什么东东?
解压之后看内容就晓得了,蕴含了操作系统大部分常用命令。

wget -O nginx.conf https://github.diablo.corp/ra…

新建一个 dockerfile 文件,将下列内容粘贴进去:

FROM scratch

# set the environment to honour SAP's proxy servers
ENV http_proxy http://sap.corp:8080
ENV https_proxy http://sap.corp:8080
ENV no_proxy .sap.corp

# give yourself some credit
LABEL maintainer="Jerry Wang"

# add and unpack an archive that contains a Debian root filesystem
ADD rootfs.tar.xz /

# use the apt-get package manager to install nginx and wget
RUN apt-get update && \
apt-get -y install nginx wget

# use wget to download a custom website into the image
RUN wget --no-check-certificate -O /usr/share/nginx/html/cheers.jpg https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.jpg && \
wget --no-check-certificate -O /usr/share/nginx/html/index.html https://github.diablo.corp/raw/slvi/docker-k8s-training/master/docker/res/cheers.html

# copy the custom nginx configuration into the image
COPY nginx.conf /etc/nginx/nginx.conf

# link nginx log files to Docker log collection facility
RUN ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log

# expose port 80 - the standard port for webservers
EXPOSE 80

# and make sure that nginx runs when a container is created
CMD ["nginx", "-g", "daemon off;"]

执行命令进行镜像的构建:

docker build -t nginx-from-scratch1.0 .

产生的日志:

最初看到镜像胜利构建的音讯。

基于这个名为 nginx-from-scratch 的镜像启动一个新的 nginx 容器:

localhost:1083, 看到首页,阐明这个新构建的镜像工作失常。

练习 2:删除所有正在运行和退出的 Docker 实例

通过本系列三篇文章的练习,咱们本机想必曾经创立了不少 Docker 实例了,是时候对它们进行一次清理了。

docker ps -a 能显示所有 docker 实例的状态,蕴含曾经退出了的:

加上 - q 参数,只显示 container id
应用这个命令,把 docker ps -aq 产生的输出作为输出传入到 docker rm 命令,达到删除所有容器实例的成果。

docker rm $(docker ps -aq)

练习 3:在一个 Docker 容器里运行指定的 web 利用

实现题目形容的这个需要有很多种方法,作为入门,让咱们从最简略的方法开始。
首先应用命令 docker ps 确保以后没有正在运行的 Docker 实例。

运行命令 docker run -it nginx
而后咱们另外开一个终端,用 docker ps 命令查看这个运行起来的容器实例,Status 的 Up 54 seconds 意思是从该实例启动到当初曾经通过了 54 秒。

应用命令进入这个容器实例:

docker exec -it bbc5d48a761c /bin/sh

进入之后看到 shell 提示符 #,咱们就能够在 nginx 容器内执行一些常用命令了。

/usr/share/nginx/html 就是 nginx 服务器内寄存 web 利用的地位,当初咱们只有想方法将咱们的 web 利用放到这个文件夹里就能够了。

问题就是如何把这个 web 利用搞到容器内的对应文件夹里。
我应用的是通过 docker volume 实现 docker 和宿主机之间的数据共享。应用 docker stop 将原来的 docker 实例停掉,而后启动新的实例。

假如我把 webapp 文件夹下载到 目录,而后用上面的命令即将 webapp 文件夹挂接到 nginx 容器内的同名文件夹:

docker run -d -p 1081:80 -v pwd/webapp:/usr/share/nginx/html/webapp –name jerry-custom nginx



最初应用 url localhost:8081/webapp, 就能拜访到这个运行在 Docker 容器里的 web 利用了。

总结

本文首先介绍了如何基于 scratch 空镜像来创立新的 Docker 镜像,以此来减小最初制作进去的镜像文件大小。接着介绍了如何用命令行删除所有正在运行和退出的 Docker 实例。最初是一个理论的例子,如何将一个开发好的 Web 利用,在 Docker 容器里运行。

本系列前三篇文章的链接:

  • Docker 实战教程之从入门到进步 (一)
  • Docker 实战教程之从入门到进步 (二)
  • Docker 实战教程之从入门到进步 (三)
正文完
 0