说明:
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已经创建成功
错误提示:
[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.
- 本文固定链接: https://www.gayj.cn/?p=340
- 转载请注明: https://www.gayj.cn/