docker学习笔记

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






你可能感兴趣的:(docker)