1、镜像、容器相关命令、Dockerfile
镜像、容器相关命令、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相关推荐
- Docker 学习笔记(Docker 架构 / 镜像 / 容器 / 常用命令 / Dockerfile / 镜像仓库)
Docker 1. Docker 入门 1.1 Docker 是什么 1.2 Docker 和 虚拟机 1.3 镜像 容器 仓库 1.4 Docker 架构 1.5 Docker 安装 1.6 doc ...
- Docker容器相关命令
容器相关命令 1.1 查看容器 查看正在运行的容器 docker ps 查看所有容器 docker ps –a 查看最后一次运行的容器 docker ps –l 查看停止的容器 docker ps - ...
- docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]
docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...
- docker删除none镜像_Docker容器相关命令
1.新建并启动容器 使用以下docker run命令即可新建并启动一个容器,该命令是最常用的命令,它有很多选项,下面将列举一些常用的选项. -d选项:表示后台运行 -P选项:随机端口映射 -p选项:指 ...
- Docker镜像和容器相关命令
Docker有两个重要的概念,镜像和容器 强烈建议先看一下这篇文章,可以帮助你理解常用命令 理解差不多了再看下面的命令选项事半功倍 镜像操作 获取镜像 $ docker [image] pull NA ...
- docker创建容器相关命令【详细版】
博主介绍
- Docker从安装使用到配置各种镜像容器
安装 安装docker (NAT模式-联网) 1.yum 在线安装 yum install docker -y 2.启动docker systemctl start docker 启动 systemc ...
- 【Docker】安装部署 及相关命令
Docker安装部署 及相关命令 前言 一.安装Docker 1.yum包更新到最新 2. 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicema ...
- Docker常用命令(启动、镜像相关、容器相关、文件拷贝、目录挂载、查看容器IP地址、Docker备份与恢复)
0.设置Docker镜像加速器 详见文章:Docker设置ustc的镜像源(镜像加速器) 1.Docker的启动与停止 注: systemctl 命令是系统服务管理器指令. (1)启动docker(守 ...
最新文章
- 贪心:Jump Game 跳跃游戏
- erlang supervisor simple_one_for_one实例
- python内置函数open_python_内置函数和open
- Pytorch教程(十五):element-wise、Broadcasting
- CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别
- 基于vue2.0 + elementUI 后台管理平台
- 支付宝上线新功能:一定要给家人开通!
- 彻底分析ARP病毒查杀防范全攻略
- Div被Select挡住的解决办法
- 取得系统当前日期和时间
- 【iKBC poker2】使用说明书(简体中文版)
- uniapp 日期时间 计算
- Sa-Token中接口的限流
- NAT原理与NAT穿透
- 这家公司只有1个人,年赚一个亿
- srsLTE 源码分析 UE_05 PLMN选择之小区选择
- 毕业设计论文——信号与线性系统实验箱
- 《Activiti/Flowable 深入BPM工作流》- Activiti 与springboot 怎么进行整合?
- 家具防窜货防伪RFID方案
- 程序员究竟是该成为“通才”还是“专才”
热门文章
- 堆——神奇的优先队列 大根堆小根堆详解,附小根堆C++代码实现与STL相关
- 使用Android模拟机开发调试移动端页面
- 主动降噪耳机哪个好?2021年双11主动降噪耳机推荐!
- 视频教程-软考项目管理知识实战(上)-软考
- linux top内存 不一致,为什么TOP看不出真实的内存占用情况?
- 护卫神安装mysql_护卫神·MySQL密码修改工具
- 【HTML | CSS | JAVASCRIPT】再见2022,一起来写一个响应式跨年倒计时吧(附源码)
- 麦肯锡精英的39个工作习惯
- 多个电商平台聚合关键字搜索接口
- 秒云“生活梦想家”计划,从一杯手冲开启