支持运行多种Linux OS
  ssGPNGBVZK0u 2023年11月02日 37 0

支持运行多种Linux OS

  • 不同Linux发行版的区别主要就是rootfs。
    base 镜像只是在用户空间与发行版一致,kernel 版本与发行版是不同的。
    容器只能使用 Host 的 kernel,并且不能修改。
[root@docker-01 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@docker-01 ~]# uname -r
3.10.0-1160.el7.x86_64
[root@docker-01 ~]# docker run -it ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
root@509a608daadd:/# /# cat /etc/issue
root@509a608daadd:/#  cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
root@509a608daadd:/# uname -r
3.10.0-1160.el7.x86_64

构建镜像


[root@docker-01 ~]#  docker load -i centos7_6.tar
071d8bd76517: Loading layer  210.2MB/210.2MB
Loaded image: centos:latest
[root@docker-01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
httpd         latest    b4f91978e2cc   12 days ago     145MB
hello-world   latest    9c7a54a9a43c   2 weeks ago     13.3kB
ubuntu        latest    ba6acccedd29   19 months ago   72.8MB
centos        latest    1e1148e4cc2c   4 years ago     202MB

docker commit

  • docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤 • 运行容器。 • 修改容器。 • 将容器保存为新的镜像。 -it 参数的作用是以交互模式进入容器
[root@docker-01 ~]# docker run -it centos
[root@995f50a7adbb /]# yum -y install vim
//打开一个新的终端
[root@docker-01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
995f50a7adbb   centos    "/bin/bash"   9 minutes ago   Up 9 minutes             adoring_noyce
[root@docker-01 ~]# docker commit  adoring_noyce centos-with-vim
sha256:bfcb9b8f15f66e14ef364127390f61a84de92cbff1e5de196263d950b4de1a13
[root@docker-01 ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED              SIZE
centos-with-vim   latest    bfcb9b8f15f6   About a minute ago   465MB
httpd             latest    b4f91978e2cc   12 days ago          145MB
hello-world       latest    9c7a54a9a43c   2 weeks ago          13.3kB
ubuntu            latest    ba6acccedd29   19 months ago        72.8MB
centos            latest    1e1148e4cc2c   4 years ago          202MB

//开启容器
[root@docker-01 ~]# docker run -it centos-with-vim
[root@91653e49be5c /]# vim
[root@91653e49be5c /]# exit

Dockerfile

[root@docker-01 ~]# mkdir ubantu/
[root@docker-01 ~]# cd ubantu/
[root@docker-01 ubantu]# vi dockerfile
[root@docker-01 ubantu]# pwd
/root/ubantu
[root@docker-01 ubantu]# ls
dockerfile
[root@docker-01 ubantu]# docker build -t ubuntu-with-vim .
[root@docker-01 ubantu]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
ubuntu-with-vim   latest    1c52006bcfa2   10 minutes ago   184MB
centos-with-vim   latest    bfcb9b8f15f6   37 minutes ago   465MB
httpd             latest    b4f91978e2cc   12 days ago      145MB
hello-world       latest    9c7a54a9a43c   2 weeks ago      13.3kB
ubuntu            latest    ba6acccedd29   19 months ago    72.8MB
centos            latest    1e1148e4cc2c   4 years ago      202MB


  • FROM (构建指令) 指定 base 镜像,必须指定且需要在Dockerfile其他指令的前面。后续的指令都依赖于该指令指定的镜像。FROM指令指定的base镜像可以是官方远程仓库中的,也可以位于本地仓库。 该指令有两种格式: FROM 指定基础image为该image的最后修改的版本(latest)。 或者: FROM : 指定基础image为该image的一个tag版本。
  • MAINTAINER (构建指令) 格式:MAINTAINER 设置镜像的作者,可以是任意字符串。用于将image的制作者相关的信息写入到image中。当我们对该image执行 docker inspect命令时,输出中有相应的字段记录该信息。 现在已经被“LABEL maintainer=”取代 LABEL maintainer="berry <88103918@qq.com>"
  • COPY (构建指令) 将文件从 build context 复制到镜像。 COPY 支持两种形式: COPY src ... dest COPY ["src", ... "dest"]
  • ADD (构建指令) 与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。 此指令用于复制新文件、目录或者远程URL地址添加到容器的指定 路径下,指令包含两种形式: ADD ... ",... ""]
  • ENV (构建指令) 设置环境变量,环境变量可被后面的指令使用,并在容器运行时保持。 格式:ENV 例如: ... ENV PATH /usr/local/nginx/sbin:支持运行多种Linux OS_nginxMY_VERSION ...
  • EXPOSE (设置指令) 格式:EXPOSE /...] 可以指定TCP或UDP,默认是TCP 告诉Docker服务器暴露的端口号,供互联系统使用。
  • VOLUME (设置指令) 格式:VOLUME [""] 将文件或目录声明为 volume。使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用。我们知道容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。当容器中的应用有持久化数据的需求时可以在Dockerfile中使用该指令。我们会在容器存储部分详细讨论。
  • WORKDIR (设置指令) 格式:WORKDIR /path/to/workdir 示例: WORKDIR /a (这时工作目录为/a) WORKDIR b (这时工作目录为/a/b) WORKDIR c (这时工作目录为/a/b/c) 为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
  • RUN (构建指令) 在构建镜像过程中要指定执行的命令。
  • CMD (设置指令) 容器启动时运行指定的命令。 Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。
  • ENTRYPOINT (设置指令) 设置容器启动时运行的命令。 Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。
  • USER USER指令用于指定容器执行程序的用户身份,默认是root用户。 使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。 格式:   USER user   USER user:group   USER uid   USER uid:gid   USER user:gid   USER uid:group 示例:   USER www
  • HEALTHCHECK 容器健康状况检查命令 语法有两种:
  1. HEALTHCHECK [OPTIONS] CMD command
  2. HEALTHCHECK NONE 第一个的功能是在容器内部运行一个命令来检查容器的健康状况 第二个的功能是在基础镜像中取消健康检查命令
[root@docker-01 ~]# mkdir nginx
[root@docker-01 ~]# cd nginx/
[root@docker-01 nginx]# ls
[root@docker-01 nginx]# pwd
/root/nginx
[root@docker-01 nginx]# vi dockerfile
[root@docker-01 nginx]# cat test.sh
#!/bin/bash
ss -anptl | grep 80 &> /dev/null
if [ $? -eq 0 ]
then
  exit 0
else
  exit 1
fi

//构建镜像
[root@docker-01 nginx]# docker build -t centos_nginx:v1 .
[root@docker-01 nginx]# docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
centos_nginx               v1        f0cd718a3d81   37 seconds ago   486MB
[root@docker-01 nginx]# docker history centos_nginx:v1

//运行镜像
[root@docker-01 nginx]# docker run -d centos_nginx:v1
f157bad76f39ca5a5667da5e3e3574ce5a23abccc228508ae8022d1da0b0a323
[root@docker-01 nginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS                            PORTS     NAMES
f157bad76f39   centos_nginx:v1   "nginx -g 'daemon of…"   8 seconds ago   Up 7 seconds (health: starting)   80/tcp    thirsty_swartz

//运行新的容器,测试不健康检查
[root@docker-01 nginx]# docker run -d centos_nginx:v1 /bin/sh -c "while true; do sleep 1;done"
909f9c776e08a8f94ef04779a00f474094463e73159182457d61bcff97c09f05
[root@docker-01 nginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS                            PORTS     NAMES
909f9c776e08   centos_nginx:v1   "/bin/sh -c 'while t…"   8 seconds ago   Up 8 seconds (health: starting)   80/tcp    youthful_dijkstra
f157bad76f39   centos_nginx:v1   "nginx -g 'daemon of…"   5 minutes ago   Up 5 minutes (healthy)            80/tcp    thirsty_swartz
[root@docker-01 nginx]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS                      PORTS     NAMES
909f9c776e08   centos_nginx:v1   "/bin/sh -c 'while t…"   33 seconds ago   Up 32 seconds (unhealthy)   80/tcp    youthful_dijkstra
f157bad76f39   centos_nginx:v1   "nginx -g 'daemon of…"   6 minutes ago    Up 6 minutes (healthy)      80/tcp    thirsty_swartz
//通过docker指令得到指定容器id的健康状态
[root@docker-01 nginx]# docker inspect -f '{{.State.Health.Status}}' 909f9c776e08
unhealthy


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: docker指令 下一篇: Docker容器技术
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jnZtF7Co41Wg   2023年12月11日   27   0   0 nginx客户端服务端
  wwLZeziuqjLR   2023年12月11日   30   0   0 Dockercentos
  MCWYWqSAMsot   2023年12月11日   31   0   0 Docker
  DnoStTHsc0vp   2023年12月11日   24   0   0 Docker
  jnZtF7Co41Wg   2023年12月10日   20   0   0 nginx客户端服务端NFS