1. Docker原理
docker 容器与容器,容器与主机 为什么能ping通? 桥接:evth-pair技术,网卡成对出现并绑定
docker0相当于一个公共的路由器
直接用容器名ping通:—link
docker run -d -P --name tomecat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02 # 但是反向ping不通!
docker network
2. Docker安装
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
https://docs.docker.com/engine/install/centos/
systemctl enable docker --now
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemctl daemon-reload
systemctl restart docker
3. Docker实战
FROM naqoda/mysql-client
WORKDIR /root
ENV HOST=47.94.218.68
ENV PORT=3306
ENV USER=root
ENV MYSQL_PWD=123456
RUN mkdir /data/ && touch /data/log
RUN touch /root/count.sh
RUN echo '#!/bin/bash' >> /root/count.sh
RUN echo 'host=$1' >> /root/count.sh
RUN echo 'port=$2' >> /root/count.sh
RUN echo 'user=$3' >> /root/count.sh
RUN echo 'while :' >> /root/count.sh
RUN echo 'do' >> /root/count.sh
RUN echo 'msg=`mysql -h $1 -P $port -u$user -e "show status like '\''Threads_connected'\'';"|awk '\''NR==2{print$2}'\''`' >> /root/count.sh
RUN echo 'echo [`date "+%Y-%m-%d %H:%M:%S"`] Number of active DB connections $msg |tee /data/log' >> /root/count.sh
RUN echo 'sleep 30' >> /root/count.sh
RUN echo 'done' >> /root/count.sh
CMD bash /root/count.sh $HOST $PORT $USER
# 在Dockerfile所在目录构建
docker build -t counter:v0.1 .
docker images # 获取 IMAGE_ID
docker run -e HOST=47.94.218.68 \
-e PORT=3306 \
-e USER=root \
-e MYSQL_PWD=123456 \
-d IMAGE_ID
docker ps # 获取CONTAINER_ID
docker logs CONTAINER_ID
docker exec -it CONTAINER_ID tail -f /data/log