05docker容器的安装及使用

.安装

先检查服务器环境,docker要求操作系统CentOS6以上,kernel 版本必须2.6.32-431或更高,即>=CentOS 6.5,运行docker时实际提示3.8.0及以上,必须64bit,32bit不支持docker。

[root@201~]# uname -r2.6.32-642.1.1.el6.x86_64

docker的存储驱动是Device Mapper,看下你的驱动是否符合

[root@201 ~]# grep device-mapper /proc/devices253device-mapper

看来我们符合以上要求,然后开始安装。

对于centos 6.5 需要先安装源

[root@201 ~]# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm


注意centos 6要安装的是docker-io来源于Fedora epel库,是第三方库,所以先要确保安装了epel

[root@201 ~]# rpm -q epel-releaseepel-release-6-8.noarch


ok,我们已经安装过epel,然后yum一下,稍等片刻就安装成功

[root@201 ~]# yum install docker-io -y


如果系统是centos 7则不用以上步骤,并且安装包是docker而不是docker-io

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


2.启动

启动守护进程

[root@201 ~]# service docker start

1

查看启动信息

[root@201data]# docker infoContainers:0Images:0Storage Driver:devicemapperPool Name:docker-253:0-286421-poolPool Blocksize:65.54kBBacking Filesystem:extfsData file:/dev/loop0Metadata file:/dev/loop1Data Space Used:305.7MBData Space Total:107.4GBData Space Available:3.536GBMetadata Space Used:729.1kBMetadata Space Total:2.147GBMetadata Space Available:2.147GBUdev Sync Supported:trueDeferred Removal Enabled:falseData loop file:/var/lib/docker/devicemapper/devicemapper/dataMetadata loop file:/var/lib/docker/devicemapper/devicemapper/metadataLibrary Version:1.02.117-RHEL6(2016-04-01)Execution Driver:native-0.2Logging Driver:json-fileKernel Version:2.6.32-642.1.1.el6.x86_64Operating System:<unknown>CPUs:1Total Memory:996.2MiBName:201.liberalman.cnID:BHFO:EYCF:XVAZ:J637:2LUV:RR6Y:UR7Z:MZ43:PR4N:CGUD:7EAJ:5SBI


设置开机启动

[root@201 ~]# chkconfig docker on

docker日志路径

/var/log/docker

3.实例测试

测试1

我们下载一个centos image

[root@201data]# docker pull centoslatest:Pulling from centos3690474eb5b4: Pull complete342c399b9d0e: Pull complete915b9d3c92fc: Downloading23.78MB/70.58MB915b9d3c92fc: Downloading70.58MB/70.58MBd5c89a2047c8:Download completeDigest:sha256:14bc8ca808518a2703b6eff1a5f3b7065d4b5d4b388b575ae6a27db8791ab19bStatus:Downloaded newer image for centos:latest

列出镜像,指定centos关键词看看我们下载的镜像

[root@201 data]# docker images centosREPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZEcentos              latest              d5c89a2047c833hours ago196.7MB

我们下载了一个近200M的镜像,好,运行container

[root@201 data]# docker run -i -t centos /bin/bash[root@f41d95a52943 /]#

-t表示传递给容器tty终端,-i是interactive,表示可以交互。可以看到我的终端也由root@201 data变成了root@f41d95a52943,说明进入了容器的终端,要退出输入exit就可以。如果要新开一个终端进入我们之前启动的容器,先查询container id

[root@201 data]# docker ps -aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf41d95a52943        centos"/bin/bash"12minutes agoUp12minutes                          backstabbing_poincare

id是f41d95a52943然后在新终端中登录

dockerexec-it f41d95a52943 /bin/bash

这样就可以登录了。

我们在docker中起了一个centos的最小系统,登录到此系统[root@f41d95a52943 /]后,查看下其ip地址,发现没有ifconfig命令,使用 yum install net-tools 安装后

[root@f41d95a52943 /]# ifconfigeth0:flags=4163  mtu1500inet172.17.0.1netmask255.255.0.0broadcast0.0.0.0inet6fe80::42:acff:fe11:1prefixlen64scopeid0x20        ether02:42:ac:11:00:01txqueuelen0(Ethernet)RX packets10375bytes12736213(12.1MiB)RX errors0dropped0overruns0frame0TX packets5643bytes309098(301.8KiB)TX errors0dropped0overruns0carrier0collisions0lo:flags=73  mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10        loop  txqueuelen0(LocalLoopback)RX packets0bytes0(0.0B)RX errors0dropped0overruns0frame0TX packets0bytes0(0.0B)TX errors0dropped0overruns0carrier0collisions0

可以看到我们docker中的centos系统,分配了一个ip 172.17.0.1,对外ping百度等网站可以ping通!是不是到此就结束了呢,当重启container的时候,你就会发现,ifconfig命令又没有了,默认是不会为我们保存修改的,所以需要我们提交对image的修改。在宿主机中查询容器id,然后提交修改

查看刚运行过的容器[root@201 ~]# docker ps -lCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES4e108c90fa11        centos"/bin/bash"2minutes agoUp2minutes                                  ecstatic_franklin [root@201 ~]# docker start 4e108c90fa114e108c90fa11然后连上去[root@201 ~]# docker exec -it 4e108c90fa11 /bin/bash安装net-tools包[root@4e108c90fa11 /]# yum install net-tools -y退出,在宿主机上提交评论[root@201 ~]# docker commit -m="add net-tools packages,nclude ifconfig command" 4e108c90fa11129d59168480299c786d0585e9eb74fdbde3dcd00ee2cd2815d11b7749e53ac7


好,现在重新启动刚才的container,连上去试试ifconfig,就会发现ifconfig已经保存在image中了。

测试2

宿主机上,我们在container上运行一个web服务器

[root@201 data]# docker run -d -P training/webapp python app.pyUnable to findimage'training/webapp:latest' locallylatest: Pulling from training/webappe9e06b06e14c: Pull complete 02a8815912ca: Download complete Status: Downloaded newer image for training/webapp:latestf0b7172ab3a14e6f078e7b01310a3b027e28234baf44f4f6f1aa68465e854f60

这个web应用为docker官方提供,本地没有,所以自动去仓库下载,很方便的实现image,code 共享,并且到处运行。

image都是分层的,所以更改后构建比较快速。

[root@201 ~]# docker psCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES272a09b3f713        training/webapp"python app.py"About a minute agoUpAbout a minute0.0.0.0:32768->5000/tcp  serene_jang

看到web服务器将docker内部的5000端口映射到我们宿主机的的32768端口,同时我们在宿主机上查看ip信息

[root@201 ~]# ps -ef|grep docker-proxy|grep -v "grep"root31633041010:56pts/000:00:00docker-proxy -proto tcp -host-ip0.0.0.0-host-port32768-container-ip172.17.0.1-container-port5000[root@201 ~]# netstat -npl|grep 32768tcp00:::32768:::*LISTEN3163/docker-proxy [root@201 ~]# ifconfigdocker0Linkencap:EthernetHWaddr82:EA:95:80:A9:F3inetaddr:172.17.42.1Bcast:0.0.0.0Mask:255.255.0.0inet6addr:fe80::c057:bbff:fe36:55cf/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:9errors:0dropped:0overruns:0frame:0TXpackets:6errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:612(612.0b)TXbytes:468(468.0b)eth0Linkencap:EthernetHWaddr 08:00:27:DD:0D:82inetaddr:192.168.1.201Bcast:192.168.1.255Mask:255.255.255.0inet6addr:fe80::a00:27ff:fedd:d82/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:469errors:0dropped:0overruns:0frame:0TXpackets:304errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:1000RXbytes:46223(45.1KiB)TXbytes:67929(66.3KiB)


宿主机的ip是192.168.1.201,我们访问这个web服务器,通过宿主机上的浏览器访问http://192.168.1.201:32768/,看到输出

Helloworld!

4.制作属于自己的镜像

突发奇想,制作一个mysql镜像,然后在自己服务器上开一堆mysql的服务,提供不同端口来访问,搞个集群什么的,呵呵

首先创建一个目录/data/mysql,并创建一个Dockerfile文件,文件内容如下

vim Dockerfile

FROMcentos6:centos6MAINTAINERliberalman"361509573@qq.com"RUN yum install -y mysql-serverRUN service mysqld start &&\

        mysql -e "grant all privileges on *.* to 'socho'@'%' identified by 'Looks137';"&&\

        mysql -u root -e "show databases;"VOLUME ["/data/volume1"]EXPOSE3306

注意:当初写此文的时候,在线拉取的mysql镜像还是5.6版本的,现在都成了5.7了,有读者反映上面的配置运行不通过,因为mysql 5.7开始,密码会随机保存到安装Mysql的用户根目录下创建一个.mysql_secret文件中,5.7.6之后更是保存到了mysqld.log中。所以目前这个配置已经不能用了,等我找到5.7之后的解决办法再更新,抱歉!

在Dockerfile所在目录下运行build命令来生成image文件,指定文件名mysql_test

[root@201mysql]# docker build -t mysql_test ./...Starting mysqld:  [  OK  ]Databaseinformation_schemamysqltest...Successfully built ac45bc85be5e创建成功,查看镜像[root@201~]# docker images mysql_testREPOSITORY          TAG                IMAGE ID            CREATED              VIRTUAL SIZEmysql_test          latest              ac45bc85be5e        About a minute ago374.3MB


这会创建一个在centos6系统上安装的mysql服务器,镜像名称是mysql_test,同时也会将centos6系统下载到本地来。好嘞,启动下

[root@201 ~]# docker run --name=mysqlserver -d -P mysql_testa903be8b69fe540395e61a6cff3db16cf944ca1177cb581f7e591247a12b0737[root@201 ~]# docker psCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESa903be8b69fe        mysql_test"/usr/bin/mysqld_saf  About a minute ago  Up About a minute  0.0.0.0:32769->3306/tcp  mysqlserver

容器内的数据库已经启动了,而且映射到宿主机32769端口,连接下

[root@201mysql]# mysql -hlocalhost -uroot -P32769Welcometothe MySQL monitor.  Commandsendwith;or\g.Your MySQL connectionidis4Serverversion:5.1.73Source distributionCopyright (c)2000,2013, Oracleand/orits affiliates. All rights reserved.Oracleisa registered trademarkofOracle Corporationand/oritsaffiliates. Other names may be trademarksoftheir respectiveowners.Type'help;'or'\h'forhelp.Type'\c'toclearthe current input statement.

mysql>


连接正常,mysql可以用了。既然是用docker,我们就要体现它的牛逼之处,所以我要启动2个以上的mysql容器,以后用来做数据库集群也可以啊,哈哈

[root@201 ~]# docker run -p 3307:3306 --name=mysqlserver1 -d -P mysql_test1 8126d375d2f832a0381704424b45669178bc718598c1c8fa8868587455df6fed[root@201 ~]# docker run -p 3308:3306 --name=mysqlserver2 -d -P mysql_test  ad920abde38b249e35600bf75f64bc44e7a007b399995e4e0fa17e7c9e5ed1a2[root@201 ~]# docker psCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESad920abde38b        mysql_test"/usr/bin/mysqld_saf  21 seconds ago      Up 20 seconds      0.0.0.0:3308->3306/tcp    mysqlserver2

8126d375d2f8        mysql_test        "/usr/bin/mysqld_safAbout a minute agoUpAbout a minute0.0.0.0:3307->3306/tcp    mysqlserver1        a903be8b69fe        mysql_test"/usr/bin/mysqld_saf  34 minutes ago      Up 34 minutes      0.0.0.0:32769->3306/tcp  mysqlserver

看吧,启动三个容器,分别按32769、3307、3308三个不同的端口连接都OK,数据库相互独立不影响。

做了以上的活还不够,如果真的要在生产环境中使用多个mysql,最好在Dockerfile文件中设置容器中mysql的datadir目录挂载宿主机目录下,以便将真实产生的数据写入到宿主机中,否则容器一关闭所有的数据就丢失了,当然不同容器挂载到宿主机中的目录一定要不同,千万不要数据混淆了

VOLUME ["/var/lib/mysql"]

好了,到此写了很多,先写到这里,接下来研究怎么做弹性伸缩和扩容!

5.docker命令

关闭容器

- docker stop 容器名

- docker kill 容器名

杀死所有正在运行的容器

- docker kill $(docker ps -a -q)

删除所有已经停止的容器

- docker rm $(docker ps -a

删除所有未打 dangling 标签的镜像

- docker rmi $(docker images -q -f dangling=true)

通过image id删除镜像

- docker rmi -f

删除所有镜像

- docker rmi $(docker images -q)

搜索和centos相关的镜像

[root@201 data]# docker search centosNAME                          DESCRIPTION                                    STARS    OFFICIAL  AUTOMATEDcentos                        The official build of CentOS.2453      [OK]      jdeathe/centos-ssh            CentOS-66.8 x86_64 / CentOS-77.2.1511 x8...26                  [OK]nimmis/java-centos            This is docker images of CentOS7 with dif...13                  [OK]million12/centos-supervisor  Base CentOS-7 with supervisord launcher, h...12                  [OK]consol/centos-xfce-vnc        Centos container with"headless" VNC sessi...10                  [OK]torusware/speedus-centos      Always updated official CentOS docker imag...8                    [OK]nickistre/centos-lamp        LAMP on centos setup4                    [OK]...


查看运行中某个容器的进程,容器id是f41d95a52943

[root@201 data]# docker top f41d95a52943UIDPIDPPIDCSTIMETTYTIMECMDroot58455388014:23              pts/200:00:00            /bin/bash


查询日志

- docker logs <容器id>

6.遇到问题

1.启动失败,查看日志文件后,发现

symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference

解决办法:执行:yum upgrade device-mapper-libs

2.Error response from daemon: Cannot start container d9bf569e3f0db33bc3d800cca4e6be1ccf7ac89e91951ba6486e3239f92516a5: [8] System error: mountpoint for cgroup not found

解决办法:因为cgroup在宿主机上没有挂载。

vim /etc/fstab

none /sys/fs/cgroup cgroup defaults 0 0

重启机器,docker也重启下即可

3.Conflict. The name “mysqlserver” is already in use by container 19a5ab1401f6

命名冲突问题,删掉

docker rm mysqlserver

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容