一、docker安装。
1、安装环境:centos7.0以上版本,及关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、本地yum源安装。
[root@docker ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker ~]# yum install epel-release -y
[root@docker yum.repos.d]# yum install -y yum-utils //utils 主要作用是管理repository及扩展包的工具
[root@docker /]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、通过yum安装docker及启动。
[root@docker /]# yum list docker-ce --show-duplicates //查看docker-ce版本
[root@docker /]# yum -y install docker-ce //安装
[root@docker /]# systemctl start docker
[root@docker /]# systemctl enable docker
二、docker基础配置。
1、主配置文件
[root@docker ~]# more /etc/docker/daemon.json
{
"graph": "/data/docker", //工作目录
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io"], //私有仓库地址
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"], //仓库加速器
"bip": "172.7.5.1/24", //docker网桥IP。
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}
重启docker使配置文件生效
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker info //查看docker信息
2、推送到远程仓库。
[root@docker ~]# docker login docker.io //登录到dockerhub
[root@docker ~]# docker search centos //查看hub上centos镜像
[root@docker ~]# docker pull crazycisco/nginx_curl //下载镜像
[root@docker ~]# docker images //查看本地镜像 docker rmi xx 删除镜像
[root@docker ~]# docker tag fce289e99eb9 crazycisco/nginx_curl:v1.0 //打标记
[root@docker ~]# docker push ansible/centos7-ansible
3、启动关闭容器
[root@docker ~]# docker run -ti --name c3 centos/tools /bin/sh //启动一个容器并进入该容器
[root@docker ~]# docker run -ti -d --name c10 --restart always centos/tools /bin/bash //设置开机自动启动
[root@docker ~]# docker attach c3 //连接到容器,exit容器关闭,ctrl + p + q 容器不关闭在后台运行
[root@docker ~]# docker exec -ti c1 /bin/sh //进入容器 exit容器不关闭
[root@docker ~]# docker run --rm --name c3 centos/tools /bin/sh //启动一个容器并进入该容器
[root@docker ~]# docker run -ti -d --name c2 centos/tools /bin/bash //启动容器并直接在后台运行
[root@docker docker]# for i in `docker ps -a |grep Exited |grep -v grep |awk '{print $1}'`;do docker rm -f $i;done //批量删除已关闭容器
[root@docker ~]# docker run -ti -d --name c6 -v /data/log/erp/:/data/log/erp/ -v /data/web/erp/:/data/web/erp/ centos/tools /bin/bash //数据持久化,映射本地目录到容器
[root@docker ~]# docker run -ti -d -P --name c13 crazycisco/nginx_curl /bin/sh //端口映射P为映射本地随机端口
[root@docker ~]# docker run -ti -d -p 8888:80 --name c14 crazycisco/nginx_curl /bin/sh //本地8888到容器80
#apt-get update && apt-get install net-tools -y //在容器中安装工具
4、容器镜像的制作与导入导出。
(1)、把现有容器制作成镜像
[root@docker erp]# docker commit c6 centos/httpd //对该容器c6保存成镜像centos/httpd,该镜像可以从新被使用。
(2)、把现有centos系统打包制作成镜像
[root@docker ]# tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot . //将现有系统打包
[root@docker tmp]# docker import system.tar //将打包文件导入到镜像
[root@docker tmp]# docker tag bc3a00846166 system:v1.0 //设置tar
[root@docker tmp]# docker run -ti -d --name system system:v1.0 /bin/bash //运行启动
(3)、镜像的导出与导入
[root@docker docker]# docker save fd317373544e >fd317373544e:v1.0.tar //将本地镜像导出到本地(主要用于备份)
[root@docker docker]# docker load < ./fd317373544e\:v1.0.tar //导入镜像
[root@docker docker]# docker tag fd317373544e centos/toos:v1.1 //设置tag
[root@docker docker]# docker images //查看导入成功并改名的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
crazycisco/nginx_curl latest cff1da6f9b7e 3 days ago 136MB
hello-world latest fce289e99eb9 10 months ago 1.84kB
hello-world v1.1 fce289e99eb9 10 months ago 1.84kB
centos/toos v1.1 fd317373544e 10 months ago 1.51GB
ansible/centos7-ansible latest 688353a31fde 2 years ago 447MB
[root@docker docker]# docker export -o nginx:v1.0.tar c12 //导出命令二
[root@docker docker]# docker import nginx\:v1.0.tar nginx:v1.0 //导入镜像命令二
(4)、镜像导出tar包及导入
[root@master data]# docker save -o kube-scheduler.tar mirrorgooglecontainers/kube-scheduler:v1.16.0-alpha.1
[root@node-02 images_tar]# docker load --input kube-proxy1.tar
二、容器的网络模式。
1、host模式
[root@docker ~]# docker run -ti --name c17 --net=host crazycisco/nginx_curl /bin/bash //与宿主机共用一个网络
2、none模式
[root@python ~]# docker run -ti --name c17 --net= crazycisco/nginx_curl /bin/bash none模式:无网卡信息
[root@python ~]# pipework docker0 -i eth0 144e60c19ab6 172.17.0.100/16@172.17.0.1 需要使用pipework工具添加ip
3、桥模式
4、container模式
三、Dockerfile与实战
1、Dockerfile
# more Dockerfile
FROM java:8
MAINTAINER waitfish from (crazycisco@126.com)
#基本信息
#设置环境变量
ENV TZ Asia/Shanghai
ENV DUBBO_IP_TO_REGISTRY 192.168.3.7
ENV DUBBO_PORT_TO_REGISTRY 20880
#复制jar文件到镜像
ADD application.properties /
ADD xxx.jar /
#ENTRYPOINT ["nohup","java","-jar","xxx.jar","&"]
ENTRYPOINT ["java","-jar","xxx.jar"]
EXPOSE 20880
EXPOSE 9280
EXPOSE 9997
2、自动发布脚本
#!/bin/bash
APP_HOME="/docker/xxx"
date=$(date +%Y%m%d%H%M)
remote=xx.xx.xx.xx
app=xxx
path=/root/.jenkins/workspace/xxx/mall_core/target
local_log_path=/data/log/xxx
docker_log_path=/data/log/xxx
old_docker_name="`docker ps -a | awk '{print $NF}' | sort | awk 'NR>3{print $0}' |grep -v NAMES | grep erp`"
cd $APP_HOME
#stop docker and renmae docker
sudo docker stop $app
sleep 2
sudo docker rename $app $app$date
[ $? -eq 0 ] && echo 'docker stop and backup success!'
#git pull jar
rsync -avzP --delete -e 'ssh -p 62222' root@$remote:$path/*.jar $APP_HOME
[ $? -eq 0 ] && echo 'pull jar package finished!'
#docker build
sudo docker build -t xxx/v1 .
if [ $? -eq 0 ]; then
echo 'docker build success!'
else
echo 'docker build fail!'
fi
sleep 3
#docker start
sudo docker run -i --name $app -P -v $local_log_path:$docker_log_path erp/v1 /bin/bash &
if [ $? -eq 0 ]; then
echo 'docker startup success!'
else
echo 'docker startup fail!'
fi
chown -R www-data:www-data $local_log_path
sudo docker rm $old_docker_name
[ $? -eq 0 ] && echo 'delete old docker is OK'
四、容器的资源限制
[root@node-01 ~]# docker run -it --name stree docker.io/lorel/docker-stress-ng:latest stress --help //查看语法
[root@node-01 ~]# docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress --vm 2 //压测内存 压测2X256M,限制256M
[root@node-01 ~]# docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8 //压测CPU 压测数量8核限制2核
[root@node-01 ~]# docker top stress //查看容器所占的资源
[root@node-01 ~]# docker stats //查看容器资源使用情况