docker镜像及容器常用命令

一、docker镜像

  docker pull

# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
2a72cbf407d6: Already exists
eccc107d7abd: Pull complete
76aa3935d77c: Pull complete
Digest: sha256:f6e250eaa36af608af9ed1e4751f063f0ca0f5310b1a5d3ad9583047256f37f6
Status: Downloaded newer image for nginx:latest
$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
bf5d46315322: Pull complete
9f13e0ac480c: Pull complete
e8988b5b3097: Pull complete
40af181810e7: Pull complete
e6f7c7e5c03e: Pull complete
Digest: sha256:147913621d9cdea08853f6ba9116c2e27a3ceffecf3b492983ae97c3d643fbbe
Status: Downloaded newer image for ubuntu:16.04

  运行容器 docker run

docker run -it --rm \
> ubuntu:16.04 \
> bash
Unable to find image 'ubuntu:16.04' locally
16.04: Pulling from library/ubuntu
Digest: sha256:e348fbbea0e0a0e73ab0370de151e7800684445c509d46195aef73e090a49bd6
Status: Downloaded newer image for ubuntu:16.04
root@d89a89ec3c03:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
root@d89a89ec3c03:/#

-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入
bash 执行一些命令并查看返回结果,因此我们需要交互式终端。

--rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容
器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果,
不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。

ubuntu:16.04 :这是指用 ubuntu:16.04 镜像为基础来启动容器。

bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash 。

进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 cat
/etc/os-release ,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器
内是 Ubuntu 16.04.4 LTS 系统。

最后我们通过 exit 退出了这个容器。

  

  列出镜像:docker image ls

# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v2 0849f1309c28 About an hour ago 109MB
its-xnetd 1.0 2087299be7b8 hours ago 198MB
fandf-image-base 1.0 26d35143484b hours ago 762MB
nginx latest 73acd1f0cfad hours ago 109MB
ubuntu 16.04 f975c5035748 days ago 112MB
ubuntu latest f975c5035748 days ago 112MB
ubuntu 17.10 1af812152d85 days ago .4MB
nginx <none> e548f1a579cf weeks ago 109MB
registry d1fd7d86a825 months ago .3MB
mysql 5.6. 15a5ee56ec55 months ago 299MB
127.0.0.1:/hello-world latest f2a91732366c months ago .85kB
hello-world latest f2a91732366c months ago .85kB
centos 7.4. 3afd47092a0e months ago 197MB
java latest d23bdf5b1b1b months ago 643MB

列表包含了 仓库名 、 标签 、 镜像 ID 、 创建时间 以及 所占用的空间 。

  删除镜像 docker rmi

# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:f6e250eaa36af608af9ed1e4751f063f0ca0f5310b1a5d3ad9583047256f37f6
Deleted: sha256:73acd1f0cfadf6f56d30351ac633056a4fb50d455fd95b229f564ff0a7adecda
Deleted: sha256:660d894d7e1779b260ce69426dced9f1750deb8a6505f052f61a9876991e73e6
Deleted: sha256:97e86b3c85516c6f3c848ee0df11bebe95154a567046225f1cd3a690fd22687e

  docker commit 使用

注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现
场等。但是,不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfile 来完成。

  启动一个nginx

# docker run --name webserver -d -p : nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
2a72cbf407d6: Already exists
eccc107d7abd: Pull complete
76aa3935d77c: Pull complete
Digest: sha256:f6e250eaa36af608af9ed1e4751f063f0ca0f5310b1a5d3ad9583047256f37f6
Status: Downloaded newer image for nginx:latest
bc4c06e17114b3c21658d8f89edb37fc11627704e42a3efcb0654e170d9e94b3

docker run 命令如果本地仓库没有,会去远程仓库pull到本地

登陆ip:80

这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口,这样我
们可以用浏览器去访问这个 nginx 服务器。

  

docker exec -it webserver bash
x.htmlc4c06e17114:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@bc4c06e17114:/# exit
exit

通过docker exec -it --name bash 获得一个可操作的shell

刷新浏览器

二、容器

  新建并启动容器 docker run

例如,下面的命令输出一个 “Hello World”,之后终止容器。

  

# docker run ubuntu:14.04 /bin/echo 'Hello world'
Hello world

下面的命令则启动一个 bash 终端,允许用户进行交互。

# docker run -t -i ubuntu:14.04 /bin/bash
root@a7cf4956678d:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@a7cf4956678d:/# pwd
/
root@a7cf4956678d:/#

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
  1.检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2.利用镜像创建并启动一个容器
  3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5.从地址池配置一个 ip 地址给容器
  6.执行用户指定的应用程序
  7.执行完毕后容器被终止

查看容器 docker container ls

# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc4c06e17114 nginx "nginx -g 'daemon of…" 18 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2

终止容器 docker container stop

# docker container stop bc4c06e17114
bc4c06e17114

查看所有容器(包括已停止的) docker container ls -a

# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7cf4956678d ubuntu:14.04 "/bin/bash" 2 minutes ago Exited (0) 28 seconds ago dreamy_dubinsky
eabc9ee2a377 ubuntu:14.04 "/bin/echo 'Hello wo…" 7 minutes ago Exited (0) 7 minutes ago jolly_shockley
ee73354b5ad9 ubuntu:14.04 "/bin/echo 'Hello wo…" 7 minutes ago Exited (0) 7 minutes ago cranky_varahamihira
bc4c06e17114 nginx "nginx -g 'daemon of…" 18 minutes ago Up 18 minutes 0.0.0.0:80->80/tcp webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2

处于终止状态的容器,可以通过 docker container start 命令来重新启动。
此外, docker container restart 命令会将一个运行态的容器终止,然后再重新启动它。

进入容器

  某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐
  大家使用 docker exec 命令

# docker run -dit ubuntu
be530e7c563cb33035ce3cc9e00d2e64f48adf319a1fe977c5d871d03f044eb5
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be530e7c563c ubuntu "/bin/bash" 9 seconds ago Up 7 seconds compassionate_pare
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]# docker exec -it be530e7c563c bash
root@be530e7c563c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@be530e7c563c:/# pwd
/
root@be530e7c563c:/#

如果从这个 stdin 中 exit,不会导致容器的停止。这就是为什么推荐大家使用 docker exec 的原因。

  导出和导入容器

  docker export

# ls
anaconda-ks.cfg etcd-v3.2.10-linux-amd64.tar.gz
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be530e7c563c ubuntu "/bin/bash" 4 minutes ago Exited (0) 20 seconds ago compassionate_pare
a7cf4956678d ubuntu:14.04 "/bin/bash" 9 minutes ago Exited (0) 7 minutes ago dreamy_dubinsky
eabc9ee2a377 ubuntu:14.04 "/bin/echo 'Hello wo…" 14 minutes ago Exited (0) 14 minutes ago jolly_shockley
ee73354b5ad9 ubuntu:14.04 "/bin/echo 'Hello wo…" 14 minutes ago Exited (0) 14 minutes ago cranky_varahamihira
bc4c06e17114 nginx "nginx -g 'daemon of…" 25 minutes ago Exited (0) 5 minutes ago webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]# docker export bc4c06e17114 > nginx.tar
[root@localhost ~]# ls
anaconda-ks.cfg etcd-v3.2.10-linux-amd64.tar.gz nginx.tar

docker import 导入容器

# cat nginx.tar | docker import - test/nginx:v1.0
sha256:777d7a2b2bf5b2ce8c66c0b344a453114cfb1bd1f75f1c3e5625d00f8b8cc35f
[root@localhost ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test/nginx v1.0 777d7a2b2bf5 15 seconds ago 107MB
nginx v2 0849f1309c28 2 hours ago 109MB
its-xnetd 1.0 2087299be7b8 15 hours ago 198MB
fandf-image-base 1.0 26d35143484b 15 hours ago 762MB
nginx latest 73acd1f0cfad 41 hours ago 109MB
ubuntu 16.04 f975c5035748 9 days ago 112MB
ubuntu latest f975c5035748 9 days ago 112MB
ubuntu 14.04 a35e70164dfb 9 days ago 222MB
ubuntu 17.10 1af812152d85 9 days ago 98.4MB

可以使用 docker container rm 来删除一个处于终止状态的容器

# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be530e7c563c ubuntu "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago compassionate_pare
a7cf4956678d ubuntu:14.04 "/bin/bash" 15 minutes ago Exited (0) 13 minutes ago dreamy_dubinsky
eabc9ee2a377 ubuntu:14.04 "/bin/echo 'Hello wo…" 20 minutes ago Exited (0) 20 minutes ago jolly_shockley
ee73354b5ad9 ubuntu:14.04 "/bin/echo 'Hello wo…" 20 minutes ago Exited (0) 20 minutes ago cranky_varahamihira
bc4c06e17114 nginx "nginx -g 'daemon of…" 31 minutes ago Exited (0) 11 minutes ago webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]# docker container rm be530e7c563c
be530e7c563c
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7cf4956678d ubuntu:14.04 "/bin/bash" 15 minutes ago Exited (0) 13 minutes ago dreamy_dubinsky
eabc9ee2a377 ubuntu:14.04 "/bin/echo 'Hello wo…" 21 minutes ago Exited (0) 20 minutes ago jolly_shockley
ee73354b5ad9 ubuntu:14.04 "/bin/echo 'Hello wo…" 21 minutes ago Exited (0) 21 minutes ago cranky_varahamihira
bc4c06e17114 nginx "nginx -g 'daemon of…" 31 minutes ago Exited (0) 11 minutes ago webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]#

用 docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器

docker container prune 可以删除所有停止的容器

# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7cf4956678d ubuntu:14.04 "/bin/bash" 15 minutes ago Exited (0) 13 minutes ago dreamy_dubinsky
eabc9ee2a377 ubuntu:14.04 "/bin/echo 'Hello wo…" 21 minutes ago Exited (0) 20 minutes ago jolly_shockley
ee73354b5ad9 ubuntu:14.04 "/bin/echo 'Hello wo…" 21 minutes ago Exited (0) 21 minutes ago cranky_varahamihira
bc4c06e17114 nginx "nginx -g 'daemon of…" 31 minutes ago Exited (0) 11 minutes ago webserver
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
a7cf4956678db31ee82e9adb0b88ad3a8771a5b0a4de7718bfe72d0688d9e2e8
eabc9ee2a37785f754b4571dc4cff286743f7d777d504ff133c6ae1404b64dd9
ee73354b5ad9ee137873537a1beae4e1988c0fe8fdfd19f7cd60eb7c4fdfd68a
bc4c06e17114b3c21658d8f89edb37fc11627704e42a3efcb0654e170d9e94b3 Total reclaimed space: 107B
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68d9a1146e82 nginx:v2 "nginx -g 'daemon of…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp web2
[root@localhost ~]#

docker学习笔记(2)的更多相关文章

  1. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  2. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  3. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  4. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  5. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  6. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  7. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  8. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  9. docker学习笔记-1

    docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ...

  10. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

随机推荐

  1. ajax得到后端数据一直提示为[object Object]解决方法

    前段ajax <script type="text/javascript"> function requestJson() { $.ajax({ type : &quo ...

  2. python下基于sokcet的tcp通信——入门篇

    环境 python版本:2.7 IDE:pycharm TCP/UDP协议均为传输层的协议,绝大部分应用程序之间的通信都是使用TCP或UDP,故而在网络通信中及其重要,想详细了解他们之间的差异,可参考 ...

  3. ArcGIS中KML转为shp文件

    问题:如何将KML转为shp文件? 方法: 1.打开ArcMap -> ArcToolbox: 2.在ArcToolbox中选择“转换工具”-> “由KML转出” -> “KML转图 ...

  4. Vue 知识整理—01-基础

    一:Vue是什么? Vue是一个JS框架. Vue.js是一套构建用户界面的渐进式框架. 库和框架的区别: ☞库:提供一些 API 工具函数,体现了封装的思想,需要我们主动调用: ☞框架:提供一套完整 ...

  5. web plugins

    <build> <resources> <resource> <directory>src/main/java</directory> &l ...

  6. 在本地运行正常的静态网页放到tomcat中却显示异常的原因

    在本地写好了一个个人网站,本地直接用浏览器运行,很顺利,然而把网站放到Tomcat里面,却发现图片显示不出来,这就奇怪了. 后来发现,我的网站的Image文件夹用了大写“I”,而网页里面的路径用了小写 ...

  7. go-ethereum源码分析 PartIII 共识流程

    A: js指令转化为新transaction 在web3上操作流程 1. import to web3 2. connect to peers 3. read local key store 4. d ...

  8. 字符编码 ASCII、Unicode和UTF-8的关系

    摘抄自廖雪峰 教程 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机 ...

  9. 【推荐】HTML5 Word Cloud——中文词云

    在线工具: http://timdream.org/wordcloud/# 源码: https://github.com/timdream/wordcloud

  10. 页面显示LCD液晶字体或者其他特殊字体

    如果web项目中需要用到LCD液晶字体显示数值(如下图所示)该怎么办? 在这就需要用到@font-face(具体看一下语法) /* 定义 */ @font-face { font-family: 'M ...