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. GlusterFS分布式文件系统的使用

    glusterfs是一款开源的分布式文件系统. 它具备高扩展.高可用及高性能等特性,由于其无元数据服务器的设计,使其真正实现了线性的扩展能力,使存储总容量可轻松达到PB级别,支持数千客户端并发访问. ...

  2. og协议-有利于SNS网站分享

    一丶前言 全球快递toWhere官网发现使用og协议,并且支付宝和淘宝活动源码也会添加og协议,查阅资料弄清og协议是什么,此刻附上og协议官方文档 一丶什么是og协议 Open Graph通讯协定( ...

  3. SQLyog 连接主机的时候出现错误

    这个 连接主机的时候出现: 这个时候打开cmd 找到mysql 的bin目录 输入 mysqld  -nt -remove  即可   直接登录,注意这里的d代表的是服务端 接下来就可以不用输入密码直 ...

  4. useragent大全

    分享几个常见的User-Agent,复制粘贴过来的,谢谢原创. window.navigator.userAgent 1) Chrome Win7: Mozilla/5.0 (Windows NT 6 ...

  5. c# winform Chart Pie 中若X轴数据为字符串时,#VALX取值为0

    https://q.cnblogs.com/q/83848/ 在winform程序中用自带的Chart进行画图表时,若画饼图,其中X轴数据为字符串,这时候如果想设置Label值的格式为#VALX:#V ...

  6. 基于Kubernetes构建企业容器云

    前言 团队成员有DBA.运维.Python开发,由于需要跨部门向公司私有云团队申请虚拟机, 此时我在思考能否在现有已申请的虚拟机之上,再进行更加细粒度的资源隔离和划分,让本团队的成员使用, 也就是在私 ...

  7. 安装vue-cli时-4058报错的解决方法

    一.报错信息 安装vue-cli时-4058报错 二.解决办法 1.安装淘宝镜像 npm --registry https://registry.npm.taobao.org info undersc ...

  8. VC调用外部程序

    #include <windows.h> int main() { STARTUPINFO mStatusInfo; memset(&mStatusInfo, 0, sizeof( ...

  9. react 入坑之罪

    componentDidMount :生命周期在react下只调用一次, render:比它先执行 componentWillRecvieProps(newProps) :能取到父组件的值 rende ...

  10. Flex 弹性盒基本语法

    网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...