首页 > Server > Docker安装使用指南
2017
03-20

Docker安装使用指南

说明:

CentOS 6 安装前提

1、配置EPEL安装源

2、安装docker

yum install docker-io -y

CentOS 7安装

系统仓库CentOS-Extras库中自带Docker,可以直接安装

yum -y install docker

我们以CentOS7的安装使用为例:

一、Docker安装

1、准备YUM仓库CentOS-Extras(系统YUM源自带)

2、安装Docker

[root@manager ~]# yum install docker -y

自动安装的包有三个:

docker docker-forward-journald docker-selinux

3、启动服务并设置成开机启动

[root@manager ~]# systemctl start docker

[root@manager ~]# systemctl enable docker

[root@manager ~]# systemctl is-enabled docker

enabled

二、Docker的使用

1、获取镜像(有两种方式,一种是互联网仓库,一种是本地仓库)—–这里先从互联网仓库进行演示

从Docker Hub仓库下载一个Ubuntu 12.04操作系统镜像

[root@manager ~]# docker pull ubuntu:12.04

下载过程中,会输出获取镜像的每一层信息。

该命令实际上相当于 # docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 从其它仓库下载时需要指定完整的仓库注册服务器地址。

例如:

[root@manager ~]# docker pull ubuntu:12.04

25b0d2422ab6: Pulling image (12.04) from docker.io/library/ubuntu, endpoint: https://registry-1.d

25b0d2422ab6: Download complete

ee91dfddafca: Download complete

67f24bc3072f: Download complete

17d818faa193: Download complete

Status: Downloaded newer image for docker.io/ubuntu:12.04

docker.io/library/ubuntu: this image was pulled from a legacy registry. Important: This registry version will not be supported in future versions of docker.

完成后,即可随时使用该镜像了,

2、创建一个镜像实例(容器)让其运行bash

[root@manager ~]# docker run -ti ubuntu:12.04 /bin/bash

Usage of loopback devices is strongly discouraged for production use. Either use `–storage-opt dm.thinpooldev` or use `–storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.

root@c8cdf2708bd7:/#

root@c8cdf2708bd7:/# ls

bin dev home lib64 mnt proc run selinux sys usr

boot etc lib media opt root sbin srv tmp var

3、列出本地镜像

[root@manager ~]# docker images

REPOSITORY
TAG
IMAGE ID
CREATED
VIRTUAL SIZE

docker.io/ubuntu 12.04 25b0d2422ab6 10 days ago 138.4 MB

172.16.40.94:5000/tmp/busybox 1.2.1 bc744c4ab376 3 weeks ago 1.113 MB

docker.io/busybox latest bc744c4ab376 3 weeks ago 1.113 MB

注:上面字段解释

REPOSITORY:来自那个仓库,如后面的ubuntu

TAG:镜像标识,如12.04

IMAGE ID:它的ID号(本容器唯一标识的镜像)

CREATED:创建时间

VIRTUAL SIZE:镜像文件大小

4、ubuntu安装软件

root@eed01a22bff3:~# apt-get install vim

5、创建本地镜像(有两种方式)

A:使用docker commit 来扩展一个镜像(不方便在一个团队中分享)

B:使用docker build 来创建一个新的镜像。(方便团队中分享),要先创建一个Dockerfile和一个目录

1、演示A:通过docker commit扩展来实现

1)、记住ID号为后面备用

eed01a22bff3

2)、退出容器,创建本地镜像

[root@manager ~]# docker commit -m “VIM-NetTools” -a “Ubuntu-12.04-Docker” eed01a22bff3 ubuntu/docker:12.04.01

d5ac5634de8a256f8332ed62ce4b718815bb0485189dc38efcfacf031799c000

其中:

m来指定提交的说明信息,跟我们使用的版本控制工具一样

a可以指定更新的用户信息;

eed01a22bff3 是用来创建镜像的容器ID(是上个镜像的ID)

ubuntu/docker:12.04.01是指定目标镜像的仓库名和tag信息

红色:是镜像创建成功后返回的ID信息

3)、查看是否新的本地镜像是否创建成功

[root@manager ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu/docker
12.04.01
d5ac5634de8a 4 minutes ago 229.4 MB

docker.io/ubuntu 12.04 25b0d2422ab6 10 days ago 138.4 MB

4)、使用新创建的本地镜像来启动容器

[root@manager ~]# docker run -ti ubuntu/docker:12.04.01

Usage of loopback devices is strongly discouraged for production use. Either use `–storage-opt dm.thinpooldev` or use `–storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.

root@81114e33a920:/#

2、演示B:通过docker build来实现

1)、新建一个目录和一个Dockerfile

[root@manager ~]# mkdir /images-docker

[root@manager images-docker]# touch Dockerfile

2)、编写Dockerfile文件

Dockerfile中每一条指令都创建镜像的一层例如

# This is a comment

FROM ubuntu/docker:12.04.01

MAINTAINER
Ubuntu-12.04-Docker

RUN apt-get -qq update

RUN apt-get -qqy install ruby ruby-dev

RUN gem install sinatra

Dockerfile 基本的语法是

使用 # 来注释

FROM 指令告诉 Docker 使用哪个镜像作为基础

接着是维护者的信息

RUN 开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件

3)、使用docker build来生成镜像

[root@manager images-docker]# docker build -t=”ubuntu/docker:12.04.01″ .
#注意后面小点表示当前路径

Sending build context to Docker daemon 2.048 kB

Step 1 : FROM ubuntu/docker:12.04.01

—> d5ac5634de8a

Step 2 : MAINTAINER Ubuntu-12.04-Docker

—> Running in ac2dcdf9957f

—> d7e36dd1f814

Removing intermediate container ac2dcdf9957f

Successfully built d7e36dd1f814

其中 -t 标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。 然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit 一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。

*注意一个镜像不能超过 127 层

此外,还可以利用 ADD 命令复制本地文件到镜像;用 EXPOSE 命令来向外部开放端口;用 CMD 命令来描述容器启动后运行的程序等。

例如

# put my local web site in myApp folder to /var/www

ADD myApp /var/www

# expose httpd port

EXPOSE 80

# the command to run

CMD [“/usr/sbin/apachectl”, “-D”, “FOREGROUND”]

4)、使用新创建的镜像来启动一个容器

[root@manager ~]# docker run -ti ubuntu/docker:12.04.01

Usage of loopback devices is strongly discouraged for production use. Either use `–storage-opt dm.thinpooldev` or use `–storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.

root@45bde82b4105:/#

查看有多少个容器在运行

[root@manager ~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e8c536545b18 ubuntu/docker:12.04.01 “/bin/bash” 7 minutes ago Exited (0) 6 minutes ago docker-v3

c81656086dcc ubuntu/docker:12.04.01 “/bin/bash” 8 minutes ago Exited (0) 7 minutes ago docker-v2

51d7115893e4 ubuntu/docker:12.04.01 “/bin/bash” 11 minutes ago Exited (0) 10 minutes ago docker-v1

4b272d007f35 ubuntu/docker:12.04.01 “/bin/bash” 17 minutes ago Exited (0) 17 minutes ago docker

[root@manager images-docker]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e8c536545b18 ubuntu/docker:12.04.01 “/bin/bash” 22 minutes ago Up 24 seconds

删除容器

[root@manager ~]# docker rm eed01a22bff3

启动容器并进入容器

[root@manager ~]# docker start docker-v3

docker-v3

[root@manager ~]# docker attach docker-v3

root@e8c536545b18:/#

注:就用这种方式打开多个容器,其IP分自动分配,不一样的

5)、获取一个容器的日志和输出信息

[root@manager ~]# docker logs docker-v3

root@e8c536545b18:/# exit

exit

root@e8c536545b18:/#

root@e8c536545b18:/#

root@e8c536545b18:/#

root@e8c536545b18:/#

root@e8c536545b18:/# ifconfig

eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02

inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0

inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:8 errors:0 dropped:0 overruns:0 frame:0

TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:648 (648.0 B) TX bytes:648 (648.0 B)

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING MTU:65536 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

root@e8c536545b18:/#

root@e8c536545b18:/# ps

PID TTY TIME CMD

1 ? 00:00:00 bash

11 ? 00:00:00 ps

root@e8c536545b18:/# ps -a

PID TTY TIME CMD

12 ? 00:00:00 ps

在另一台机子上安装docker-registry(建仓库)

编辑/etc/docker-registry.yml

先打标签

[root@manager ~]# docker tag d7e36dd1f814 172.16.38.201:5000/ubuntu/docker:12.04.1

注:d7e36dd1f814 要打标签的镜像ID,/ubuntu/docker:12.04.1放在registry仓库中的名字

[root@manager ~]# docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

ubuntu/docker 12.04.01 d7e36dd1f814 About an hour ago 229.4 MB

172.16.38.201:5000/ubuntu/docker 12.04.1 d7e36dd1f814 About an hour ago 229.4 MB

标签已经成功

开始推到仓库

[root@manager ~]# docker push 172.16.38.201:5000/ubuntu/docker:12.04.1

The push refers to a repository [172.16.38.201:5000/ubuntu/docker] (len: 1)

Sending image list

Pushing repository 172.16.38.201:5000/ubuntu/docker (1 tags)

ee91dfddafca: Image successfully pushed

67f24bc3072f: Image successfully pushed

17d818faa193: Image successfully pushed

25b0d2422ab6: Image successfully pushed

d5ac5634de8a: Image successfully pushed

d7e36dd1f814: Image successfully pushed

Pushing tag for rev [d7e36dd1f814] on {http://172.16.38.201:5000/v1/repositories/ubuntu/docker/tags/12.04.1}

用nginx反代至5000端口(不反代用5000端口也行,只是为了方便)

server {

listen 80;

server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

proxy_pass http://172.16.38.201:5000;

root /var/lib/docker-registry/repositories;

index index.html index.htm;

}

出现下图,所说registry已经创建成功

Docker安装使用指南 - 第1张  | 运维手册

错误提示:

[root@manager ~]# docker search 172.16.38.201:5000/ubuntu/docker:12.04.1

Error response from daemon: Unexpected status code 404

原因:

因为可能有其它的容器已经打开,所以出错,直接重启docker

systemclt restart docker

[root@manager ~]# docker pull 172.16.38.201:5000/ubuntu/docker:12.04.1

[root@manager ~]# docker pull 172.16.38.201:5000/ubuntu/docker:12.04.1

d7e36dd1f814: Download complete

d7e36dd1f814: Pulling image (12.04.1) from 172.16.38.201:5000/ubuntu/docker

ee91dfddafca: Download complete

67f24bc3072f: Download complete

17d818faa193: Download complete

25b0d2422ab6: Download complete

Status: Image is up to date for 172.16.38.201:5000/ubuntu/docker:12.04.1

172.16.38.201:5000/ubuntu/docker: this image was pulled from a legacy registry. Important: This registry version will not be supported in future versions of docker.


最后编辑:
作者:李国庆
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复

你的email不会被公开。