苍天有泪 发表于 2018-5-29 07:17:13

docker1.12安装配置及使用笔记

  官方安装手册地址:https://docs.docker.com/engine/installation/linux/ubuntulinux/
  更多笔记:http://dockerpool.com/static/books/docker_practice/
  kubernetes(k8s)的yml+dockerfile如何编写参考:https://github.com/xiaoyawl/docker-nginx/blob/master/Dockerfile
  compose+swarm不错的笔记:http://www.jianshu.com/p/54b1b0a098c3
  使用的操作系统是是ubuntu14.04,按照官方的推荐的配置(其他操作系统,多少有点区别请参考官方文档)。安装步骤如下:
  1、检查内核版本
uname -r #把linux内核升级到3.10以上  2、apt的证书验证和key
apt-get update
apt-get install apt-transport-https ca-certificates
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D  3、添加源
vim /etc/apt/sources.list.d/docker.list
deb https://apt.dockerproject.org/repo ubuntu-trusty main
apt-get update
apt-get purge lxc-docker #如果已经安装了,或者安装的是更老的docker.io卸载掉
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual #安装aufs存储必须包  4、安装docker
apt-get install docker-engine
service docker start  5、配置国内镜像
  关于docker一定要按照官方安装文档来,特别是ubuntu14.04默认apt安装的是1.9比较老的版本,如果使用国内镜像就会报什么乱七八糟的的错误,升级到最新版,问题解决
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://8db7f41f.m.daocloud.io
#检查下是否成功添加了一行:DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://8db7f41f.m.daocloud.io"
vim /etc/default/docker  6、Docker常用命令讲解
a.镜像:
镜像位置:/var/lib/docker/aufs

docker commit             #容器名 centos:v1 ,创建镜像,-a作者信息 -m镜像信息
dockerversion         #查看版本
dockersearch centos   #搜索可用docker镜像
dockerimages            #查看当前docker所有镜像
dockerpullcentos      #下载镜像(会把所有相关tag都下载下来,建议还是加上:tag少下载点)
dockerpush名称+tag    #上传镜像
cat   centos.tar | docker import-centos6#Docker导入镜像
dockerexportid> cenos6.tar            #Docker导出镜像
docker rmiimages      #删除镜像,最好是仓库名+TAG(如果要多个就空格开就行),这样其他标签相同id的文件就不会删除(只是删除标签),如果要删除所有标签同一个id,那就
直接输入id,就会都删除  b.容器部分:

dockerrun   centos echo "hello word"#在docker容器中运行hello world!
dockerruncentos yum install ntpdate #在容器中安装ntpdate的程序
#创建一个后台运行的80端口映射的,本地挂载目录的ubuntu系统
docker run -itd --name -p 80:80 -v /opt/tomcat:/opt ubuntu_nginx ubuntu:14.04 /bin/bash
dockerps -l                           #命令获得最后一个容器的id
dockerps-a                        #查看所有的容器。
docker commit 容器名称                  #提交刚修改的容器,例如:
docker run -i -t centos /bin/bash       #在容器里启动一个/bin/bash shell环境,可以登录进入操作,其中-t 表示打开一个终端的意思,-i表示可以交互输入。
docker run -d -i -t centos /bin/bash    #在后台启动,退出要ctrl+P、Q才能继续后台,不能exit,exit就相当于关闭容器
docker attach CONTAINER ID            #进入在后台启动后的这个容器
docker exec -it <CONTAINER ID> /bin/bash#这样你就进到这个container 里面了,这个bash退出也不会影响之前 docker run 启动的 bash/
docker run-dcentos:v1/bin/bash    #-d表示在后台启动,以daemon方式启动。
docker run -d -p 80:80 -p 8022:22 centos:latest /usr/bin/sshd -D #端口映射
docker port 容器名                      #查看端口映射情况
docker stop 容器名                      #正常关闭容器
docker kill 容器名                      #直接kill掉进程
docker startid                        # 启动某个容器,也可以改为docker start -i 容器名称
docker rmid                           #删除容器  d.排bug常用:

docker inspect id               #查看容器、镜像状态
docker logs -tf --tail 10 容器名#最近10行容器内部运行情况
docker top 容器名               #查看运行中容器的进程  7、Docker独立IP及容器互联
  Ubuntu部分
apt-get install bridge-utils    #安装brctl安装包
service docker stop             #停止docker
ifconfig docker0 down         #停止网卡
brctl show                      #查看物理机上有哪些网桥
brctl delbr docker0             #删除docker的默认网桥
brctl addbr br0               #自定义网桥
ifconfig br0 192.168.180.22 netmask 255.255.255.0    #给网桥指定IP和子网
vim /etc/default/docker         #修改docker启动桥接
DOCKER_OPTS="$DOCKER_OPTS -b=br0"
service docker start            #启动docker
brctl show                      #查看是否生效  Centos部分
service docker stop
ifconfig docker0 down
brctl delbr docker0
cd /etc/sysconfig/network-scripts/
  vi ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br0"
BOOTPROTO=static
  vi ifcfg-br0
DEVICE="br0"
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
TYPE=bridge
IPADDR=192.168.1.165
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS=192.168.1.50
  vi /etc/sysconfig/docker
other_args="-b=br0"
  service docker start
# ps -ef|grep docker
root      5502   10 01:23 pts/3    00:00:00 /usr/bin/docker -d -b=br0
root      580053110 01:47 pts/3    00:00:00 grep docker
  service network restart
可能会报以下错误:
Shutting down interface eth0:                              
Shutting down loopback interface:                        
Bringing up loopback interface:                           
Bringing up interface br0:Determining if ip address 192.168.1.161 is already in use for device br0...
                                                         
Bringing up interface eth0:Error: Connection activation failed: Master connection not found or invalid
                                                         
解决方法:
此时,当前网卡也是可以通信的,但是通过网络管理工具修改IP之后,当前修改操作是不会生效的。那如何消除这个提示呢?
其实,问题的原因是RedHat自己开发的NetworkManager管理工具和/etc/sysconfig/network-scripts/ifcfg-ethx配置不同步造成的。如果要消除这个提示,请关闭NetworkManager
  服务即可:
chkconfig NetworkManager off
service NetworkManager stop
Stopping NetworkManager daemon:                           
此时,再重新加载network服务即可:
service network restart
Shutting down interface br0:                              
Shutting down loopback interface:                        
Bringing up loopback interface:                           
Bringing up interface br0:Determining if ip address 192.168.1.161 is already in use for device br0...
                                                         
Bringing up interface eth0:device eth0 is already a member of a bridge; can't enslave it to bridge br0.
                                                         
  
8、为容器手动配置静态ip               
安装新的 iproute 包:
wget https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
yum localinstall iproute-2.6.32-130.el6ost.netns.2.x86_64.rpm
  安装pipework:
git clone https://github.com/jpetazzo/pipework   
cp ~/pipework/pipework /usr/local/bin/
启动Docker容器:
docker run -itd --net=none jdeathe/centos-ssh:latest /bin/bash
  pipework br0 <CONTAINER ID> 192.168.1.170/24@192.168.1.1
  9、制作可以ssh登录的本地Docker镜像
安装制作CentOS镜像的工具:
yum -y install febootstrap
  制作CentOS镜像文件centos6-image目录:
febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim-minimal -i openssh-server -i openssh-clients centos6 centos6-image
  http://mirrors.aliyun.com/centos/6/os/x86_64/
  制作Docker镜像,镜像名字是centos6-base:
cd centos6-image && tar -c .|docker import - centos6-base
  制作可以ssh登陆的Docker镜像,名字是centos6-ssh:
docker build -t centos6-ssh https://git.oschina.net/feedao/Docker_shell/raw/start/Dockerfile
  经过前面的六个步骤,一个可以登陆的本地docker镜像就制作好了。
用户名是:root,密码是:123456
  10、dockerfile
  参考链接:http://www.blogjava.net/yongboy/archive/2013/12/16/407643.html
#执行,千万别忘记后面的点号
docker build -f /opt/testfile -t ubuntu_14.04_autostart_nginx .#指定镜像版本
FROM ubuntu:14.04
#指定作者
maintainer lulinyi
#镜像生成过程中执行的命令
RUNecho "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty main restricted" > /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty main restricted" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates main restricted" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates main restricted" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty universe" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty universe" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates universe" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates universe" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty multiverse" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty multiverse" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates multiverse" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty-updates multiverse" >> /etc/apt/sources.list && \
echo "deb
http://cn.archive.ubuntu.com/ubuntu/
trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb-src
http://cn.archive.ubuntu.com/ubuntu/
trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y nginx
#端口映射,run时-p 80对应!但是还不如直接run的时候指定呢!
EXPOSE 80
#改命令为nginx的前台模式,CMD run的时候不要再加/bin/bash否则会被覆盖!exec的时候加就行!
CMD ["nginx","-g","daemon off;"]  
页: [1]
查看完整版本: docker1.12安装配置及使用笔记