1. 首先准备一台Linux虚拟机学习使用docker, 本文是基于centos7.3
你需要配置一下网络,让该虚机可以在线安装/更新rpm。
2. 更新操作系统,不更新有可能导致docker报一些error
#yum update –y
3. 修改源
#vi /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
4. 安装
#yum install docker-engine
5. 设置docker开机启动
#chkconfig docker on
6. 查看server/client版本,如果显示不正常请重启系统
#docker version
7. 查询某个镜像
#docker search XXX(镜像名称)
镜像名称可以从镜像仓库网页上查看。
https://hub.docker.com/
8. 拉取镜像 pull
#docker pull xxx
如果报下面这个错,一般是源被墙掉了的原因。
[root@controller ~]# docker pull python
Using default tag: latest
latest: Pulling from library/python
9f0706ba7422: Retrying in 1 second
d3942a742d22: Retrying in 5 seconds
62b1123c88f6: Retrying in 1 second
2dac6294ef18: Waiting
a7bb658fb099: Waiting
a811de274338: Waiting
771f11f32dc9: Waiting
a16d4d6b543c: Waiting
error pulling image configuration: Gethttps://dseasb33srnrn.cloudfront.net/registry-v2/docker/registry/v2/blobs/sha256/f9/f9a9a73a36808dc906fa7b38f517e16937a0943046f59fc23d8b77fd6400a369/data?Expires=1498710588&Signature=Jq2hHPTclzz6LRQ-YDM-ckVKpTn1mkyy-Gw5tmOBcyXc4aEpLWunr3oIdc96AYmtpBhhBlssHzRyYAEkXp1qRLqGqC3tVA7M-rWwquDo8FjiyKfyXEwpptUzr23ENVKzvJc1BwnwndQrVJYy5px3krfQe41zYC-DAV6tvnDi5Rs_&Key-Pair-Id=APKAJECH5M7VWIS5YZ6Q:dial tcp: lookup dseasb33srnrn.cloudfront.net on 114.114.114.114:53: read udp xxx:52714->114.114.114.114:53: i/o timeout
解决办法:换源/或者使用工具。
我的解决方法:
1) 注册DaoCloud
2) 在你的Linux主机上执行#docker login daocloud.io
3) 输入daocloud用户名密码,显示登录成功
4) 在daocloud网页上查询镜像,选择之后,点击”拉取”
5) 在弹出的窗口里复制拉取镜像字符串
6) 在你的主机上继续执行#docker pull daocloud.io/library/python:2.7.7
2.7.7: Pulling from library/python
a3ed95caeb02: Pull complete
a3adb83f5e79: Pull complete
b2f31ed69e64: Pull complete
871cd50ff22e: Pull complete
2d820baa19d8: Pull complete
c6c2e05d1a63: Pull complete
be40e8c8d99e: Pull complete
974354b566a4: Pull complete
1489cccb6606: Pull complete
504af06a9b10: Pull complete
Digest:sha256:2034bc78a67657ee8f1a0838c879f7d98d3db675d6420069312678b9d11be2cc
Status: Downloaded newer image for daocloud.io/library/python:2.7.7
7) 拉取成功
9. 查询本地镜像
#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/python 2.7.7 25e9a1fd38e1 2 years ago 1.04GB
10. 执行一些命令,执行成功。
[root@controller ~]# docker rundaocloud.io/library/python echo "hello world"
hello world
[root@controller ~]# docker rundaocloud.io/library/python uname -r
3.10.0-514.21.1.el7.x86_64
11. 上面的容器只运行了一次就会关闭,我们可以加一个指令让容器变为在后台一直执行。
#docker run –d kinogmt/centos-ssh ping www.baidu.com
640627ccbb7d0f1e614ef7913b4d022bb7889e8a95628f2cff8e534d32270253 (返回值,这个是容器ID)
12. 查看后台运行的容器产生的log
#docker logs –f 640 (只需要容器ID前几位即可)
13. 使用ps或者top指令查看正在运行的容器
查看进程:
14. 使用inspect指令查看运行中的容器的详细信息
#docker inspect 482
15. 使用stop命令停止后台运行的容器。
#docker stop 640
16. 进入伪控制台
#docker run –t –i imagename /bin/bash
17. 通过Dockerfile 构建镜像
#mkdir mydockerbuild
#cd mydockerbuild
#touch Dockerfile
#vi Dockerfile
编辑文件
#基于哪个镜像修改
FROM ubuntu
#更新一下系统,以及安装一个软件,可以按照自己需求修改
RUN apt-get -y update && apt-getinstall -y fortunes
#执行cmd命令
CMD /use/games/fortune -a |cowsay
保存并退出
#docker build –t docker-ubuntu . (.代表在当前目录寻找Dockerfile)
可以看到3条指令都执行成功。
Build完成之后,可以使用#docker images查看新的image
18. 使用命令构建image
首先需要一个基础image存在,可以先使用pull指令拉取。
#-i,采用交互式的方式启动容器,-t启动一个命令终端, --name给容器命名,--hostname给容器内的主机命名
#docker run -i -t --name erictest1--hostname=test ubuntu
#进入容器的交互式命令终端,现在就相当于在一台干净的服务器上,需要自己去安装搭建测试环境所需要的组件
#例如yum install nginx 等
#对修改后的image进行提交(commit),并起一个名字
#-m注释,--authorimage的作者,倒数第二个是containerID,最后一个参数是image的名字
2d94f34d95
#docker commit -m='my first image' --author='ericchen' 6002f7afb38a ubuntu
19. 建立本地image仓库
1) 首先下载registry
#docker pull registry
2) 为了防止出现以下的”https返回http”的error信息,首先对docker文件做修改
#vi /etc/docker/daemon.json
{ "insecure-registries":["192.168.2.101:5000"] }
保存退出。
重启docker
#systemctl restart docker
3) 启动仓库容器,默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下
# docker run -d -p 5000:5000 --restart=always -v /data/docker/registry:/tmp/registryregistry
4) 下载一个小容量的镜像busybox测试仓库功能
#docker pull busybox
5) 修改busybox的tag
# docker tag busybox 192.168.2.101:5000/busybox
6) 上传image到本地仓库,上传成功。
#docker push 192.168.2.101:5000/busybox
7) 准备另外一台docker虚拟机,配置相同的网络192.168.2.102,配置step2。尝试去192.168.2.101这个仓库里拉取镜像,可以拉取成功
#docker pull 192.168.2.101:5000/busybox
8) 搜索本地仓库中的镜像
一般的search命令会报404error,暂时不知道什么原因。
#docker search 192.168.2.101:5000/
我改用其他curl指令,可以成功返回imagelist
#curl -XGET http://192.168.2.101:5000/v2/_catalog
20. 删除镜像
#docker rmi 镜像名
21. Push镜像(参考19条,暂时未push到外网)
22. 启动已经停止的容器
#docker start/restart influxdb
参数是容器name
23. 进入在后台运行的容器
#docker exec –it 容器id /bin/bash
24. 让宿主机重启后,容器也跟着自动启动
# dockerrun -i -t -d --name centos_aways--restart=always centos
25. 使用持久化存储
示例1:
用docker部署一个influxdb数据库
在docker机器上执行:
#docker run -d -v/var/lib/influxdb --name influxdb-storage busybox:latest #创建持久化存储空间
#docker run -d -p 8083:8083 -p 8086:8086 --restart=always--name=influxdb --volumes-from influxdb-storage influxdb/influxdb
8083是网页的端口,8086是DB的端口。
示例2:
用docker部署一个prometheus数据库
#docker run -d -v /var/lib/prometheus --name prometheus-storagebusybox:latest
#docker run -d -p 9090 --name=prometheus --restart=always --volumes-from prometheus-storage prom/prometheus