您的位置:首页 > 运维架构 > Docker

centos docker的使用

2016-12-05 22:08 281 查看
1. 镜像
是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
2. docker容器
镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
3. docker仓库
存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub(hub.docker.com),国内公开仓库http://dockerpool.com/

安装:
centos6 上安装(6.5之前版本需要升级一下 yum update ) yum install -y epel-release
yum install -y docker-io

如果是centos7
yum install -y docker

启动docker
/etc/init.d/docker start

镜像管理:
docker pull centos //从docker.com获取centos镜像,如果太慢,直接做个加速http://www.apelearn.com/bbs/thread-15126-1-1.html
docker images //查看本地都有哪些镜像
docker tag centos bob //为docker镜像设置便签为bob,再使用docker images查看会多出一行,镜像的id和centos是一样的
docker search centos //从仓库里面搜索cnetos的镜像
docker run -it bob /bin/bash //用下载的镜像开启容器,-i 表示让容器的标准输入打开,-t 表示分配一个伪终端,要把-i和-t放在镜像名字的前面
当镜像发生修改后,我们可以吧该镜像提交重新生成一个新版本进行再本地。
docker ps //查看运行的容器,加上-a可以查看没有运行的容器
docker rmi bob//用来删除指定镜像,其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要该镜像还有其他tag,就不会删除该镜像,后面的参数为镜像id时,则会彻底删除真个镜像,连通所有边卡一同删除。
docker tag centos centos:test //新添加的还可以指定tag

docker start id 启动容器
docker exec -it id号 /bin/bash 进入容器
如果要使用ifconfig 查看ip,则需要安装net-tools包:yum install -y net-tools

使用已有镜像的容器创建新的镜像
docker commit -m "install network" -a "bob" 3ew bob/centos
-m 加改动的信息
-a 指定作者相关的信息
3ew 容器id
在后面为新镜像的名字

从容器里面退出来可以使用exit或ctrl+d

docker基于本地模板导入创建镜像 http://openvz.org/Download/templates/precreated 模板导入为镜像
cat centos-6-x86_64-minimal.tar.gz |docker import - centos-6-x86_64
吧现有的镜像导出为一个文件
docker save -o centos_net-64 bob/latest
用文件恢复本地镜像
docker load --input bob-centos.tar 或者
docker load < bob-centos.tar

可以吧自己的镜像上传到dockerhub官网上去,但需要有自己的账户。
docker push images_name

给镜像改名字
docker tag 45fg centos-net-64:bob

docker的使用和配置

备份docker

docker commit -m "yum net-tools" -a "bob" 12fgfd2462g3 bob/centos
-m 改动的信息
-a 作者的信息
一串为容器id
最后面是新镜像的名字

查看启动的容器

docker ps
查看所有的容器
docker ps -a
创建容器,但容器并没有启动
docker create -it centos
启动一个容器
docker start 容器id //启动容器后,可以使用docker ps 查看,之前使用的docker run相当于先create,在start
docker run -itd centos-6-x86 /bin/bash -d在后台运行
进入一个启动的容器
docker exec -it 容器id /bin/bash

exec 可以随意的退出和进入,不影响容器的启动和停止
attach 不算好用,退出终端,容器也会停止

docker logs 可以查看容器运行的历史信息

给容器定义一个名字
docker run -name bob -itd centos bash

删除容器
docker rm 513g
强制删除容器
docker rm -f 531g

导出容器
docker export container_id > fil2.tar
生成bob镜像
cat file.tar |docker import - bob

创建新的镜像
docker build -t centos:httpd

把现有镜像导出为一个文件
docker save -o bob-centos.tar bob:centos
使用文件恢复本地镜像
docker load --input bob-centos.tar 或者
docker load < bob-centos.tar
docker load - i centos-docker-image.tar 导入镜像到docker里

docker的镜像以及一些数据都在/var/lib/docker目录下
cd /var/lib/docker/

杀死一个容器,或让一个容器退出
docker kill cd5232f 后面是容器id

启动、停止或重启
docker start fa43521dfasdfe
docker stop fasdfefaeae
docker restart dfaeojfa43523

指定端口
docker run -d -p 5000:5000 centos

docker仓库管理
docker pull registry 下载registry镜像

docker run -d -p 5000:5000 registry 启动镜像,并监听5000端口
可以使用telnet 127.0.0.1:5000 测试
curl 127.0.0.1:5000 可以访问它
给镜像标记一下,必须带有私有仓库的ip和port
docker tag centos 192.168.103.131:5000/centos
docker push 192.168.103.131:5000/centos 上传到私有仓库
vim /etc/init.d/docker

把$exec -d $other_args改为
$exec -d --insecure-registry 192.168.103.131:5000 $other_args
然后重启服务
service docker restart
docker start c50 启动registry容器

curl http://192.168.103.131:5000/v1/search 由于版本更改使用这个查看上传的镜像
curl http://192.168.103.131:5000/v2/_catalog 进入registry容器
docker exec -it 953 sh或者bash
docker exec -it 953 /bin/ls 可以查看里面的内容

安装ipconfig功能
yum install -y net-tools

数据管理
挂载本地目录到容器里面去

docker run -itd -v /data/:/data1/ centos:bob bash
-v 用来指定挂载目录,前面的是本地目录,后面的data1是容器的目录

挂载数据卷
docker run -itd --volumes-from suspicious_ptolemy centos bash
--volumes-from 后面是名字
相当于吧容器为suspicious_ptolemy容器的磁盘挂载到cenots上

创建数据卷容器
docker run -itd -v /data/ --name centos-test centos bash
/data/指的是是容器里面的/data跟宿主机没有关系

docker run -itd --volumes-from centos-test centos bash

备份和恢复
mkdir /data_backup

docker rum --volumes-from centos-test -v /data_backup/:/backup bob:centos
tar cvf /backup/data.tar /data/

docker网络管理
host模式;使用docker run时,使用--net=host指定

docker使用的网络实际商河宿主机一样,在容器看到的网卡ip是宿主机上的ip

container模式:使用--net=container:container_id 多容器使用共同的网络,看到的ip是一样的。
none模式:使用--net=none 指定,这种模式下,不会配置任何网络
bridge模式,使用--net=bridge指定
默认模式就是使用这种网络模式,类是于vmware的nat的网络模式,中一个宿主机上的所有容器会在同一网段下。相互之间是可以通信的。

外部访问容器
docker run -itd -p 5123:80 centos-http:bob bash
本地的5123端口对应容器的80端口

docker容器互联
先创建一个容器,命名为bob
docker run -itd -p 13306:3306 --name bob centos bash
再新建一个容器,命名abc,并与bob互联
docker run -itd -p 1222:80 --name abc --link bob:abc centos-test bash

docker配置桥接网络
centos7
l为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。这个需求其实很容易实现,我们只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。l安装pipwork
git clone https://github.com/jpetazzo/pipework cp~/pipework/pipework /usr/local/bin/l开启一个容器 docker run -itd --net=none --name aming123 centos /bin/bashlpipework br0 aming123 172.7.15.201/24@172.7.15.107 #201为容器的ip,@后面的ip为宿主机iplbrctladdif br0 eth0 #eth0为宿主机网卡,这一步为把br0和eth0桥接起来lipaddr add 172.7.15.107/24 br0 #把107的ip绑定在br0上ldocker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ip

centos6
lcd /etc/sysconfig/network-scripts/; cpifcfg-eth0 ifcfg-br0lvi ifcfg-eth0 //增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1lvi ifcfg-br0//修改DEVICE为br0,Type为Bridge,把eth0的网络设置设置到这里来lservice network restartl安装pipwork:git clone https://github.com/jpetazzo/pipework; cp~/pipework/pipework /usr/local/bin/l开启一个容器: docker run -itd --net=none --name aming123 centos /bin/bashlrpm -Uvhhttps://repos.fedorapeople.org/openstack/EOL/openstack-grizzly/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm#不安会报错Object "netns" is unknown,try "ip help"lpipework br0 aming123 172.7.15.201/24ldocker exec -it aming123 /bin/bash #进去后ifconfig查看就可以看到新添加的ip

pipework br0 aming123 172.7.15.201/24@172.7.15.1 //@后面的ip为网关ip

dockerfile创建镜像

l1. FROM //指定基于哪个基础镜像l格式 FROM <image> 或者 FROM <image>:<tag>, 比如lFROM centoslFROM centos:latest
l2. MAINTAINER //指定作者信息l格式 MAINTAIN <name> ,比如lMAINTAINER aming aming@aminglinux.com
l3. RUN //镜像操作指令l格式为 RUN <command> 或者 RUN [“executable”, “param1”, “param2”],比如lRUN yum install httpdlRUN ["/bin/bash","-c", "echo hello"]
l4. CMD // 三种格式:lCMD ["executable","param1", "param2"]lCMD command param1 param2lCMD ["param1","param2"]lRUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如lCMD ["/bin/bash", "/usr/local/nginx/sbin/nginx","-c", "/usr/local/nginx/conf/nginx.conf"]
l5. EXPOSE l格式为 EXPOSE <port> [<port>...] , 比如lEXPOSE 22 80 8443l这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。
l6. ENV l格式 ENV <key> <value>, 比如 lENV PATH /usr/local/mysql/bin:$PATHl它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量lENV MYSQL_version5.6
l7. ADD 格式 add <src> <dest>l将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。比如lADD <conf/vhosts> </usr/local/nginx/conf>
l8. COPY l格式同addl使用方法和add一样,不同的是,它不支持url
l9. ENTRYPOINT 格式类似CMDl容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:lCMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。比如,容器名字为amingl我们在Dockerfile中指定如下CMD:lCMD [“/bin/echo”, “test ”]l启动容器的命令是 dockerrun aming这样会输出 testl假如启动容器的命令是 docker run -it aming /bin/bash 什么都不会输出lENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行lENTRYPOINT ["echo","test"]ldocker run -it aming 123l则会输入 test 123 ,这相当于要执行命令 echotest 123
l10. VOLUME l格式 VOLUME ["/data"]l创建一个可以从本地主机或其他容器挂载的挂载点。l
l11. USER l格式 USER daemonl指定运行容器的用户l
l12. WORKDIR l格式 WORKDIR /path/to/workdirl为后续的RUN、CMD或者ENTRYPOINT指定工作目录

l先下载nginx的配置文件 wget http://www.apelearn.com/study_v2/.nginx_conflvim Dockerfile //内容如下l############################################################
# Dockerfile tobuild NginxInstalled Containers
# Based on CentOS
############################################################
# Set the base image to CentOS
FROM centos
# File Author / Maintainer
MAINTAINERamingaming@aminglinux.com

# Install necessary tools
RUN yum install -y pcre-develwgetnet-tools gcc
RUN yum install -y zlibzlib-develmake
RUN yum install -y openssl-devel
l# Install Nginx
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
RUN tar zxvfnginx-1.8.0.tar.gz
RUN mkdir -p/usr/local/nginxlRUN cd nginx-1.8.0.tar.gz &&./configure --prefix=/usr/local/nginx&& make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
COPY .nginx_conf /usr/local/nginx/conf/nginx.conf

# Expose ports
EXPOSE 80
# Set the default command to execute
# when creating a new container
ENTRYPOINT /usr/local/nginx/sbin/nginx -c/usr/local/nginx/conf/nginx.confl创建镜像:ldocker build -t centos_nginx .docker images 可以看到我们新建的镜像
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  信息 commit