为了账号安全,请及时绑定邮箱和手机立即绑定

Docker 入门

标签:
Docker

Docker 的安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。

Docker CE 的安装请参考官方文档。

安装完成后,运行下面的命令,验证是否安装成功。

$ docker version# 或者$ docker info

Docker 需要用户具有 sudo 权限,为了避免每次命令都输入 sudo,可以把用户加入 Docker 用户组(官方文档)。

$ sudo usermod -aG docker $USER

Docker 是服务器--客户端架构。命令行运行 docker 命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动(官方文档)。

# service 命令的用法$ sudo service docker start# systemctl 命令的用法$ sudo systemctl start docker

查看 docker 版本


$ docker versionClient:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.7.1
 Git commit:   6f9534c Built:        Thu Sep  8 10:31:18 2016
 OS/Arch:      darwin/amd64Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638 Built:        Thu Aug 18 17:52:38 2016
 OS/Arch:      linux/amd64

搜索可用 docker 镜像


$ docker search <image_name># 例如$ docker search tutorial
NAME                                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
learn/tutorial                                                                                40georgeyord/reactjs-tutorial                   This is the backend of the React comment b...   5                    [OK]
microsoft/aci-tutorial-app                                                                    2fiware/tutorials.tourguide-app                FIWARE Tour Guide App sample application        1                    [OK]
mhausenblas/kairosdb-tutorial                 GitHub fetcher for KairosDB tutorial            1                    [OK]
microsoft/aci-tutorial-sidecar                                                                1muli/gluon-tutorials-zh                       https://github.com/mli/gluon-tutorials-zh       1                    [OK]
chris24walsh/flask-aws-tutorial               Runs a simple flask webapp demo, with the ...   1                    [OK]
colemurray/medium-facenet-tutorial            Container for medium-facenet-tutorial. Con...   1fgraichen/concourse-tutorial-hello-world                                                      0camphor/python-tutorial                       camphor-/python-tutorial                        0                    [OK]
activeeon/par-connector-tutorial              Do the par-connector tutorial with R. The ...   0                    [OK]
splicemachine/tutorial-spark-kafka-consumer   Spark Streaming Tutorial                        0krishnatest/docker-nodejs-tutorialkk          docker-nodejs-tutorialkk                        0rade95/concourse-tutorial-hello-world                                                         0helinwang/paddle-k8s-tutorial                                                                 0sahotay/concourse-tutorial-hello-world                                                        0kidikarus/concourse-tutorial-47-tasks                                                         0lukasheinrich/quickana-tutorial               Image for the analysis code built from htt...   0starkandwayne/concourse-tutorial-ci                                                           0bluerdocker/concourse-tutorial-hello-world                                                    0dlws/tutorial-tensorflow-cpu                                                                  0joshuacox/rabbitmq-tutorials                  Rabbit MQ Tutorial Demos                        0                    [OK]
cloudboost/tutorial                                                                           0starkandwayne/concourse-tutorial                                                              0

问题一:默认情况下 docker 是到哪里拉取镜像的?如何自定义配置?
回答:默认拉取地址:https://hub.docker.com
centos 下修改为国内源:

# 在 /etc/sysconfig/docker 文件中末尾增加一行:DOCKER_OPTS="--registry-mirror=http://hub-mirror.c.163.com"# 然后重新运行 docker 服务:service docker restart

问题二:拉取下来的镜像又是放在哪里?如何自定义配置?
回答:通过下面命令查看

docker info | grep "Docker Root Dir"

通过下面方法自定义路径:

## 如果是 CentOS 则添加下面这行:OPTIONS="--graph=/root/data/docker" --selinux-enabled -H fd://## 如果是 Ubuntu 则添加下面这行(因为 Ubuntu 默认没开启 selinux):OPTIONS="--graph=/root/data/docker" -H fd://## 或者添加配置信息DOCKER_OPTS="-g /root/data/docker"

在容器中运行命令


docker 容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

docker run 命令有两个参数,一个是镜像名,一个是要在镜像中运行的命令。

$ docker run learn/tutorial echo "hello word"hello world

$ docker run learn/tutorial cat /etc/issue
Ubuntu 12.04 LTS \n \l

在容器中安装新的程序


下一步我们要做的事情是在容器里面安装一个简单的程序(ping)。我们之前下载的 tutorial 镜像是基于 ubuntu 的,所以你可以使用 ubuntu 的 apt-get 命令来安装 ping 程序:apt-get install -y ping

备注:apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

注意:在执行 apt-get 命令的时候,要带上 -y 参数。如果不指定 -y 参数的话,apt-get 命令会进入交互模式,需要用户输入命令来进行确认,但在 docker 环境中是无法响应这种交互的。

$ docker run learn/tutorial apt-get install -y ping
Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  iputils-ping0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]debconf: delaying package configuration, since apt-utils is not installed
Fetched 56.1 kB in 1s (28.8 kB/s)
Selecting previously unselected package iputils-ping.
(Reading database ... 7545 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...

保存对容器的修改


当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker 中保存状态的过程称之为 committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

使用 docker ps -l 命令获得安装完 ping 命令之后容器的 id。然后把这个镜像保存为 learn/ping

使用 docker commit 来保存对容器的修改:

  1. 运行 docker commit,可以查看该命令的参数列表。

  2. 你需要指定要提交保存容器的 ID。(译者按:通过docker ps -l 命令获得)

$ docker commit fa56b78b5a50 learn/pingsha256:c7e772ec6d5112b84831a7130c74e5a0d0cd1804ad9426b004230c7a0af7ba94

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
learn/ping          latest              c7e772ec6d51        28 seconds ago      139.5 MB
learn/tutorial      latest              a7876479f1aa        5 years ago         128 MB

但是实际环境中并不推荐如上所示的 commit 用法,具体可以查看《Docker 从入门到实践》中的描述,总结下来为三点:

  1. 由于 commit 命令的执行,有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。

  2. 使用 commit 生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。

  3. 不符合分层存储的概念,即除当前层外,之前的每一层都是不会发生改变的。

使用运行新镜像


在新的镜像中运行 ping www.163.com 命令。一定要使用新的镜像名 learn/ping 来运行 ping 命令。(因为最开始下载的 learn/tutorial 镜像中是没有 ping 命令的)

$ docker run learn/ping ping www.163.com
PING www.163.com.lxdns.com (115.223.24.39) 56(84) bytes of data.64 bytes from 115.223.24.39: icmp_req=1 ttl=37 time=0.264 ms64 bytes from 115.223.24.39: icmp_req=2 ttl=37 time=0.546 ms

查看容器中的日志

## 实时查看 docker 容器日志$ docker logs -f -t --tail 行数 容器名



作者:Uchen
链接:https://www.jianshu.com/p/1c64983da36f


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消