镜像、容器相关命令、Dockerfile

  • 1、docker的镜像和容器
  • 2、docker命令小结
  • 3、Dockerfile创建image
    • 3.1、指令说明
    • 3.2、Dockerfile定制image流程

1、docker的镜像和容器

镜像是文件,容器是进程。
容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件,这里的文件包括进程运行所需要的可执行文件、依赖软件、库文件、配置文件等等…

不妨通过一个实例来获得更直观的认识

假设你需要把nginx运行在Docker容器中,则第一步需要下载nginx镜像

sudo docker pull nginx

下载nginx镜像之后可以查看Docker镜像:

sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    f0b8a9a54136   10 days ago    133MB
ubuntu        latest    7e0aa2d69a15   4 weeks ago    72.7MB
hello-world   latest    d1165f221234   2 months ago   13.3kB
  • 可知,nginx镜像的大小为133MB

事实上,nginx镜像并非一个单独的文件,而是有层级结构:

sudo docker history nginx
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
f0b8a9a54136   10 days ago   /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B
<missing>      10 days ago   /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B
<missing>      10 days ago   /bin/sh -c #(nop)  EXPOSE 80                    0B
<missing>      10 days ago   /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B
<missing>      10 days ago   /bin/sh -c #(nop) COPY file:09a214a3e07c919a…   4.61kB
<missing>      10 days ago   /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7…   1.04kB
<missing>      10 days ago   /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0…   1.96kB
<missing>      10 days ago   /bin/sh -c #(nop) COPY file:65504f71f5855ca0…   1.2kB
<missing>      10 days ago   /bin/sh -c set -x     && addgroup --system -…   63.9MB
<missing>      10 days ago   /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B
<missing>      10 days ago   /bin/sh -c #(nop)  ENV NJS_VERSION=0.5.3        0B
<missing>      10 days ago   /bin/sh -c #(nop)  ENV NGINX_VERSION=1.19.10    0B
<missing>      10 days ago   /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B
<missing>      11 days ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B
<missing>      11 days ago   /bin/sh -c #(nop) ADD file:7362e0e50f30ff454…   69.3MB
  • 可知,nginx镜像一共有15层,其中第1层为69.3MB,其他层的大小可以忽略

将nginx运行在docker容器中

docker run -itd -p 80:80 --name=nginx nginx

查看nginx容器

docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                               NAMES
53d17752e5a7   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   0.0.0.0:80->80/tcp, :::80->80/tcp   nginx
  • 可知,nginx容器运行成功

访问站点

  • 可知,nginx容器正常运行中
    将创建好的index.html放入nginx容器中并访问
docker cp index.html 53d17752e5a7://usr/share/nginx/html


停止docker容器

docker stop 53d17752e5a7
53d17752e5a7

  • 内容已无法正常访问
    重新开启nginx,并访问,此次更换为8080端口
docker run -p 8080:80 -d nginx
18d5437f07718e4702004f64c62454b2f4a44db9249653b5a1bb7f1fc8868385

  • 已知,docker在容器内所做的改动都是暂时的,没有被保存下来
    重新将index.html上传到nginx中,并提交更改
docker cp index.html 18d5437f0771://usr/share/nginx/html
docker commit -m "fun" 18d5437f0771
sha256:8431bebbb41fc463cba06e97719c06a7a5f32367098db490450312bc2abc2a69

重新查看images

docker images
REPOSITORY    TAG       IMAGE ID       CREATED              SIZE
<none>        <none>    8431bebbb41f   About a minute ago   133MB
nginx         latest    f0b8a9a54136   10 days ago          133MB
ubuntu        latest    7e0aa2d69a15   4 weeks ago          72.7MB
hello-world   latest    d1165f221234   2 months ago         13.3kB
  • 可知,刚才commit的操作生成了一个新的image,名称为,IMAGE ID为8431bebbb41f

因为没有名字,所以重新生成一次,并制定名字为nginx-fun

docker commit -m "fun" 18d5437f0771 nginx-fun
sha256:e29adf09d0b2edf51d9ffbd5c081a5e6f537eaac2bd8671d185e6cc22c45bab4

重新查看一下images

docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
nginx-fun     latest    e29adf09d0b2   11 seconds ago   133MB
<none>        <none>    8431bebbb41f   12 minutes ago   133MB
nginx         latest    f0b8a9a54136   10 days ago      133MB
ubuntu        latest    7e0aa2d69a15   4 weeks ago      72.7MB
hello-world   latest    d1165f221234   2 months ago     13.3kB
  • 已知,生成了一个叫nginx-fun的image,image id为:e29adf09d0b2

删除名称为的image

docker rmi 8431bebbb41f
Deleted: sha256:8431bebbb41fc463cba06e97719c06a7a5f32367098db490450312bc2abc2a69

查看删除之后的images

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx-fun     latest    e29adf09d0b2   7 minutes ago   133MB
nginx         latest    f0b8a9a54136   10 days ago     133MB
ubuntu        latest    7e0aa2d69a15   4 weeks ago     72.7MB
hello-world   latest    d1165f221234   2 months ago    13.3kB
  • 由上可知名称为的image已被删除
    查看docker中所有的容器,包括未运行的
docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                           PORTS     NAMES
18d5437f0771   nginx     "/docker-entrypoint.…"   56 minutes ago      Exited (137) 51 seconds ago                stoic_hawking
2d68e0b713a8   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (137) 58 minutes ago                happy_banach
c9d3f04322ab   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (137) About an hour ago             brave_murdock
c3f424cccc14   nginx     "/docker-entrypoint.…"   About an hour ago   Created                                    heuristic_bassi
8b110eabc500   nginx     "/docker-entrypoint.…"   About an hour ago   Created                                    frosty_golick
53d17752e5a7   nginx     "/docker-entrypoint.…"   3 hours ago         Exited (0) About an hour ago               nginx
3eb77ec8320f   ubuntu    "echo hello docker"      4 hours ago         Exited (0) 4 hours ago                     zealous_sinoussi
32ab3b841c24   ubuntu    "echo hello docker"      4 hours ago         Exited (0) 4 hours ago                     infallible_ishizaka
  • 已知,总共有8个容器
    删除容器
docker rm 18d5437f0771 2d68e0b713a8
18d5437f0771
2d68e0b713a8

重新查看

CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS                           PORTS     NAMES
c9d3f04322ab   nginx     "/docker-entrypoint.…"   About an hour ago   Exited (137) About an hour ago             brave_murdock
c3f424cccc14   nginx     "/docker-entrypoint.…"   About an hour ago   Created                                    heuristic_bassi
8b110eabc500   nginx     "/docker-entrypoint.…"   About an hour ago   Created                                    frosty_golick
53d17752e5a7   nginx     "/docker-entrypoint.…"   3 hours ago         Exited (0) About an hour ago               nginx
3eb77ec8320f   ubuntu    "echo hello docker"      4 hours ago         Exited (0) 4 hours ago                     zealous_sinoussi
32ab3b841c24   ubuntu    "echo hello docker"      4 hours ago         Exited (0) 4 hours ago                     infallible_ishizaka
  • 由上可知,总共剩下6个容器

2、docker命令小结

获取image:docker pull
创建image:docker build
列出image:docker images
运行container:docker run
列出正在运行的container:docker ps
列出所有container:docker ps -a
删除已经结束的container:docker rm
删除image:docker rmi
在host和container之间拷贝文件:docker cp
保存已经被改动的image生成为新的image:docker commit
进入正在运行的容器:docker exec -it --privileged 39bc60e016a7 /bin/bash

3、Dockerfile创建image

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需要的的指令和说明

3.1、指令说明

FROM指令
定制的镜像基于FROM后面接的镜像,如FROM nginx表示后续的操作都是基于nginx
RUN指令
用于执行后面跟着的命令行命令,有一下两种格式:
shell格式:

RUN <命令> # <命令>等同于在终端操作的shell命令

exec格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如 RUN ["./index.php",  "dev",  "offline"] 等价于RUN ./test.php dev offline

3.2、Dockerfile定制image流程

先创建一个新目录,并进入目录

mkdir d1
cd d1

创建Dockerfile文件,文件名为“Dockerfile”,一般来说创建image时,文件名就叫“Dockerfile”

touch Dockerfile

编辑Dockerfile,加入image代码

vi Dockerfile

Dockerfile文件内容为:

FROM alpine:latest #
MAINTAINER gzc # 声明作者
CMD echo "hello docker" # 运行echo "hello docker"

用docker命令来生成新的image

# -t表示设置一个tag,tag名为hello_docker
# .表示把当前路径下的所有内容都生成image
docker build -t hello_docker .
#运行结果如下:
Sending build context to Docker daemon  2.048kB
Step 1/3 : FROM alpine:latest
latest: Pulling from library/alpine
540db60ca938: Pull complete
Digest: sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f
Status: Downloaded newer image for alpine:latest---> 6dbb9cc54074
Step 2/3 : MAINTAINER gzc---> Running in 1332307d96a7
Removing intermediate container 1332307d96a7---> a50ce1d22cc6
Step 3/3 : CMD echo "hello docker"---> Running in 9b0ca66dcaf8
Removing intermediate container 9b0ca66dcaf8---> 86f9f9cf0ece
Successfully built 86f9f9cf0ece
Successfully tagged hello_docker:latest

查看images

docker images hello_dockerREPOSITORY     TAG       IMAGE ID       CREATED              SIZE
hello_docker   latest    86f9f9cf0ece   About a minute ago   5.61MB
nginx-fun      latest    e29adf09d0b2   2 hours ago          133MB
nginx          latest    f0b8a9a54136   11 days ago          133MB
ubuntu         latest    7e0aa2d69a15   4 weeks ago          72.7MB
alpine         latest    6dbb9cc54074   5 weeks ago          5.61MB
hello-world    latest    d1165f221234   2 months ago         13.3kB
  • 已知已经生成了新的image,image的大小为5.61MB,tag为latest

运行image

docker run hello_dockerhello docker
  • 已知使用Dockerfile方式定制的image已经成功运行

1、镜像、容器相关命令、Dockerfile相关推荐

  1. Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)

    Docker 1. Docker 入门 1.1 Docker 是什么 1.2 Docker 和 虚拟机 1.3 镜像 容器 仓库 1.4 Docker 架构 1.5 Docker 安装 1.6 doc ...

  2. Docker容器相关命令

    容器相关命令 1.1 查看容器 查看正在运行的容器 docker ps 查看所有容器 docker ps –a 查看最后一次运行的容器 docker ps –l 查看停止的容器 docker ps - ...

  3. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  4. docker删除none镜像_Docker容器相关命令

    1.新建并启动容器 使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项. -d选项:表示后台运行 -P选项:随机端口映射 -p选项:指 ...

  5. Docker镜像和容器相关命令

    Docker有两个重要的概念,镜像和容器 强烈建议先看一下这篇文章,可以帮助你理解常用命令 理解差不多了再看下面的命令选项事半功倍 镜像操作 获取镜像 $ docker [image] pull NA ...

  6. docker创建容器相关命令【详细版】

    博主介绍

  7. Docker从安装使用到配置各种镜像容器

    安装 安装docker (NAT模式-联网) 1.yum 在线安装 yum install docker -y 2.启动docker systemctl start docker 启动 systemc ...

  8. 【Docker】安装部署 及相关命令

    Docker安装部署 及相关命令 前言 一.安装Docker 1.yum包更新到最新 2. 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicema ...

  9. Docker常用命令(启动、镜像相关、容器相关、文件拷贝、目录挂载、查看容器IP地址、Docker备份与恢复)

    0.设置Docker镜像加速器 详见文章:Docker设置ustc的镜像源(镜像加速器) 1.Docker的启动与停止 注: systemctl 命令是系统服务管理器指令. (1)启动docker(守 ...

最新文章

  1. 贪心:Jump Game 跳跃游戏
  2. erlang supervisor simple_one_for_one实例
  3. python内置函数open_python_内置函数和open
  4. Pytorch教程(十五):element-wise、Broadcasting
  5. CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别
  6. 基于vue2.0 + elementUI 后台管理平台
  7. 支付宝上线新功能:一定要给家人开通!
  8. 彻底分析ARP病毒查杀防范全攻略
  9. Div被Select挡住的解决办法
  10. 取得系统当前日期和时间
  11. 【iKBC poker2】使用说明书(简体中文版)
  12. uniapp 日期时间 计算
  13. Sa-Token中接口的限流
  14. NAT原理与NAT穿透
  15. 这家公司只有1个人,年赚一个亿
  16. srsLTE 源码分析 UE_05 PLMN选择之小区选择
  17. 毕业设计论文——信号与线性系统实验箱
  18. 《Activiti/Flowable  深入BPM工作流》- Activiti 与springboot 怎么进行整合?
  19. 家具防窜货防伪RFID方案
  20. 程序员究竟是该成为“通才”还是“专才”

热门文章

  1. 堆——神奇的优先队列 大根堆小根堆详解,附小根堆C++代码实现与STL相关
  2. 使用Android模拟机开发调试移动端页面
  3. 主动降噪耳机哪个好?2021年双11主动降噪耳机推荐!
  4. 视频教程-软考项目管理知识实战(上)-软考
  5. linux top内存 不一致,为什么TOP看不出真实的内存占用情况?
  6. 护卫神安装mysql_护卫神·MySQL密码修改工具
  7. 【HTML | CSS | JAVASCRIPT】再见2022,一起来写一个响应式跨年倒计时吧(附源码)
  8. 麦肯锡精英的39个工作习惯
  9. 多个电商平台聚合关键字搜索接口
  10. 秒云“生活梦想家”计划,从一杯手冲开启