Docker 从使用到镜像构建


本文记录于2020/4/18,修改于 2022/3/13

Docker官方文档
https://docs.docker.com/reference/

Docker hello-world

万物基于hello world docker官方为我们提供了一个hello-world供我们测试docker是否安装成功。现在运行它。

sudo docker run hello-world

出现这个画面表示安装成功(值得注意的是docker拉取容器镜像的命令是docker pull,但当我们运行某个容器时如果docker在本地没有找到就会去docker hub上拉取并运行。)
输入sudo docker images查看刚刚拉去到的hello-word

Docker without sudo

现在已经成功安装并运行了Docker,但有一个小问题我每次使用docker命令的时候都要加sudo这很麻烦对我来说也没必要。

使用gpasswd -a 用户名 docker将你的用户加入到docker用户组

随后执行 newgrp docker 登录到该群组即可免sudo 执行 docker 命令

运行一个Tomcat容器

前面已经看到要运行某个容器可执行docker run 容器名/容器id,但为了更清晰运行过程我决定先拉取tomcat容器镜像再执行它。
执行docker pull tomcat拉取容器镜像,默认拉取最新版镜像即标签为latest(是DockerHub上的最新镜像而不知最新版tomcat)
如果想使用特定版本的tomcat请使用docker pull tomcat:标签名

使用docker images可以查看当前你的docker中有那些容器镜像

现在使用docker run tomcat运行刚刚拉取的容器。

啊,熟悉的tomcat启动界面。
但是,现在使用浏览器访问刚刚启动的tomcat是会失败的,因为我们启动时缺少一个参数 -p-p可以指定容器内端口与宿主机端口映射关系其格式为-p 宿主机端口号:容器端口号。现在加上端口号试一试docker run -p 8080:8080 tomcat。我使用的是虚拟机虚拟机ip为192.168.64.137。访问192.168.64.137:8080

啊熟悉的404(⊙﹏⊙)

但是我想放一个自己写的页面怎么办呢,这时就需要另一个重要的参数-v其作用是将宿主机的文件目录与容器内文件目录绑定。类似与共享目录。首先进入容器内看看容器内tomcat放在了哪里,执行docker run -it tomcat /bin/bash进入容器。后面紧随其后的/bin/bash表示替换容器启动时执行的命令为/bin/bash。(详见原文

可选取值为SIGKILL ,SIGTERM ,SIGINT
其中SIGTERMSIGINT可以正常关闭正在运行的应用,SIGKILL则不能
SIGKILL相当于kill -9
SIGTERM 相当于kill
SIGINT 相当于Ctrl + c

HEALTHCHECK

HEALTHCHECK目的是在容器中运行特定的指令以检查容器中的应用设否正常工作,他也有两种格式:

HEALTHCHECK [OPTIONS] CMD command

HEALTHCHECK NONE
继承自父镜像,默认不进行任何检测

SHELL

SHELL指令用于切换RUN,CMD,ENTRYPOINT的默认shell,默认情况下linux使用的是["/bin/sh", "-c"]Windows使用的是["cmd", "/S", "/C"]通常用于当默认shell执行不了某个命令时使用SHELL指令切换shell执行完成后再通过SHELL指令切回原来的shell.
大幻梦森罗万象狂气断罪眼 2333