Docker支持在主流的操作系统平台上使用,包括Ubuntu、CentOS、Windows以及MacOS系统。
Docker支持Centos6及以上的版本
安装Docker
对于CentOS6.x系统,使用如下安装命令(对系统的内核有要求至少2.6以上才行,推荐 centos7.0以上):
yum install -y http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
yum install -y docker-io
对于CentOS7.0以上系统,通过yum安装:yum install -y docker
默认从Docker Hub下载最新镜像命令:
下载最新的版本:docker pull centos
指定下载版本:docker pull centos:7.1
搜寻镜像
搜寻一个jenkins镜像:docker search jenkins
删除镜像:docker rmi id
强制删除镜像:docker rmi -f id
创建镜像
创建镜像的方法有三种:基于已有的镜像容器创建、基于本地模板导入、基于Dockerfile创建。
基于已有的镜像容器创建:docker commit -m "info" -a "Author" id repository:tag
基于本地模板导入:cat xxxxxxxxxxxx.tar.gz | docker import - repository:tag #可在http://openvz.org寻找需要的模板下载到本地
Dockerfile创建:略
存出和载入镜像
将某个现有镜像centos:7.1存出:docker save -o centos_7.1.tar centos:7.1
将镜像包导入本地镜像列表:docker load < centos7.1.tar
上传镜像
在DockerHub官方注册用户后,默认上传到官方仓库: docker push test:latest
创建容器
直接创建容器:docker create -it centos:latest
新建并启动容器:docker run centos -i -t centos:latest /bin/bash #-t:分配一个伪终端并绑定到容器的标准输入上,-i:让容器标准输入保持打开
例如:docker run -it -d -p 0.0.0.0:33061:3306 --restart=always --name mysql_5.6 -v /dbdata:/dbdata mysql:v5.6 /bin/bash
docker run -it -d -p 8086:8080 --env-file=./env_jdk1.8_tomcat7.list --restart=always --name tomcat_8086 -v /home/sambashare/Tools:/dbdata tomcat:v6.0-v7.0 /bin/bash
docker run -it -d -p 33062:3306 --restart=always --name mysql_33062 -v /home/sambashare/Tools:/dbdata mysql:v5.6_1606018 /bin/bash
docker run -it -p 8080:8080 --env-file=/env_jdk1.8_tomcat8.list --restart=always --name jenkins_8080 -v /home/sambashare/Tools:/dbdata jenkins:v2.7.1 /bin/bash
docker run -it -p 8080:8080 --env-file=/env_jdk1.8_tomcat8.list --restart=always --name jenkins_8080 -v /home/uftp:/dbdata tomcat:v8.0 /bin/bash
docker run -it -d -p 9001:80 -v /etc/localtime:/etc/localtime:ro --restart=always --name nginx_9001 -v /home/uftp/share_nginx_9001:/etc/nginx/nginx.conf nginx:latest /bin/bash
docker run -it -p 80:80 -v `pwd`/www:/www -v `pwd`/config:/etc/nginx/sites-enabled -v `pwd`/logs:/var/log/nginx dockerfile/nginx
开启和终止容器
开启容器:docker start id
终止容器:docker stop id
终止并重启:docker restart id
进入容器
docker attach id/name #多个用户同时attach到同一个容器的时候,当某个发生堵塞,其它都用户都无法操作
docker exec -i -t id /bin/bash #推荐使用
删除容器
docker rm id #-f::强行删除,-l:删除容器的链接,-v:删除容器挂载的数据卷
导出和导入容器
导出容器:docker export id > xxxxxx.tar
导入容器:cat xxxxxx.tar | docker import - repository:tag
例如:cat testlink.tar | docker import - testlink:v1.9.14
创建和上传私有仓库
创建仓库:docker run -d -p 5000:5000 registry #若未指定,默认仓库路径在容器/tmp/registry目录下
第一步,创建仓库并指定挂在本地卷:docker run -d -p 5000:5000 -v /dbdata/registry:/tmp/registry registry
查看镜像是否已存在:curl 127.0.0.1:5000/v1/search
第二步,命名本地镜像名称:docker tag docker.io/centos 127.0.0.1:5000/centos
上传私私有仓库:docker push 127.0.0.1:5000/centos
第三步,查看已上传本地库的镜像,ls /dbdata/registry
挂载数据卷
挂载一个本地主机文件或目录到容器中作为数据卷:docker run -d -p --name /opt/data:/opt/data centos /bin/bash
数据容器提供其它容器挂载:
第一步,创建一个数据容器:
docker run -it -v /dbdata --name dbdata centos #-v:在容器中使用该地址若没有自动创建
第二步,开启一个或多个容器并使用数据容器作为数据卷:
docker run -it --volumes-from dbdata --name db1 centos
容器互联
开启新的容器,连接到已有的容器:docker run - d -p --name web --link name:alias centos /bin/bash #--link:参数格式为name:alias,name是指要链接的容器名称,alias是这个连接的别名,可自行定义,链接后会在被链接的容器中 name显示被允许链接的容器名称,例如:web容器要链接db,创建web容器时指定db,被链接容器的name显示为:web/db,表示接受web 容器进来。
查看环境信息
docker info
docker version
查看镜像或容器详细信息
查看容器IP:docker inspect --format='{{.NetworkSettings.IPAddress}}' ee36
查看容器挂载的宿主机目录:docker inspect --format "{{.Volumes}}" o8df
容器的4种网络模式:
1.bridge模式
2.host模式
3.container模式
4.none模式
容器时间配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
其它补充:
从国内镜像库下载:docker pull dl.dockerpool.com:5000/centos
镜像命名别名:docker tag test:latest centos:latest
获取镜像详细信息:docker inspect id
获取镜像详细信息中某个值:docker inspect -f {{".Author"}} id
手动添加防火墙可供外部访问的端口:vi /etc/sysconfig/iptables 添加:-A INPUT -p tcp -m state --state NEW -m tcp --dport 33061 -j ACCEPT
防火墙查看NAT链:iptables -t nat -nL或iptables -t nat -S
Docker创建容器时自动会给防火墙添加一条nat规则:iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 4223 -j DNAT --to-destination 172.17.0.5:80 ! -i docker0
firewalld防火网设置类似如下:
新建文件/usr/lib/firewalld/services/jenkins.xml
<?xml version="1.0" encoding="utf-8"?><service>
<short>Nexus</short>
<description>Nexus OSS</description>
<portprotocol="tcp"port="9083"/></service>
修改防火墙设定
firewall-cmd --permanent --add-service=nexus
firewall-cmd --reload
容器SSH
容器SSH中运行如下
yum -y install openssh openssh-clients openssh-server
mkdir -p /var/run/sshd
/usr/sbin/sshd -D &
cp id_rsa.pub authorized_keys
chmod 600 authorized_keys
/etc/ssh/sshd_config RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
在当前主机cat id_rsa.pub >> .ssh/authorized_keys
移动authorized_keys到远程主机/root/.ssh/下
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
强制杀掉tomcat进程脚本
app_key="txncore-connector"
pidlist=`ps -ef|grep tomcat | grep -v "grep"|awk '{print $2}'`
#ps -u $USER|grep "java"|grep -v "grep"
echo "tomcat Id list :$pidlist"
if [ "$pidlist" = "" ]
then
echo "no tomcat pid alive"
else
for pid in ${pidlist}
{
kill -9 $pid
echo "KILL $pid:"
echo "service stop success"
}
fi
rm -rf /usr/local/tomcat/webapps/$app_key*
scp /root/.jenkins/workspace/txncore-connector_8081/target/txncore-connector.war @172.17.0.10:/usr/local/tomcat/webapps
ssh 172.17.0.10 -p 22
netstat -tunlp
scp /root/.jenkins/workspace/txncore-connector_8081/target/txncore-connector.war @172.17.0.10:/usr/local/apache-tomcat-6.0.45/webapps
ifconfig
cd /usr/local/apache-tomcat-6.0.45/bin
source /etc/profile
./startup.sh
私服启动脚本:
gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -b 127.0.0.1:5000 -w 1 docker_registry.wsgi:application
gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:15000 -w 8 docker_registry.wsgi:application
创建私服配置文件:
vi /etc/init/docker-registry.conf
description "Docker Registry"
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 10 5
script
exec gunicorn --access-logfile /var/log/docker-registry/access.log --error-logfile /var/log/docker-registry/server.log -k gevent --max-requests 100 --graceful-timeout 3600 -t 3600 -b localhost:15000 -w 8 docker_registry.wsgi:application
end script
下载私服镜像,启动容器脚本:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --restart=always --name hna-registry registry
问题:上传镜像HTTPS失败
root@Docker-Master:~# docker push 10.3.2.210:5000/redis:1.0
FATA[0000] Error response from daemon: v1 ping attempt failed with error: Get https://10.3.2.210:5000/v1/_ping: tls: oversized record received with length 20527. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 10.3.2.210:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/10.3.2.210:5000/ca.crt
解决办法:
开发客户端执行vi /etc/default/docker 添加 DOCKER_OPTS="--insecure-registry 10.3.2.210:5000"