1. Docker原理

docker 容器与容器,容器与主机 为什么能ping通? 桥接:evth-pair技术,网卡成对出现并绑定
docker0相当于一个公共的路由器
直接用容器名ping通:—link

  1. docker run -d -P --name tomecat03 --link tomcat02 tomcat
  2. docker exec -it tomcat03 ping tomcat02 # 但是反向ping不通!
  3. docker network

2. Docker安装

  1. yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo
  5. sudo yum install -y docker-ce docker-ce-cli containerd.io

https://docs.docker.com/engine/install/centos/

  1. systemctl enable docker --now
  1. mkdir -p /etc/docker
  2. tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  5. "exec-opts": ["native.cgroupdriver=systemd"],
  6. "log-driver": "json-file",
  7. "log-opts": {
  8. "max-size": "100m"
  9. },
  10. "storage-driver": "overlay2"
  11. }
  12. EOF
  13. systemctl daemon-reload
  14. systemctl restart docker

3. Docker实战

  1. FROM naqoda/mysql-client
  2. WORKDIR /root
  3. ENV HOST=47.94.218.68
  4. ENV PORT=3306
  5. ENV USER=root
  6. ENV MYSQL_PWD=123456
  7. RUN mkdir /data/ && touch /data/log
  8. RUN touch /root/count.sh
  9. RUN echo '#!/bin/bash' >> /root/count.sh
  10. RUN echo 'host=$1' >> /root/count.sh
  11. RUN echo 'port=$2' >> /root/count.sh
  12. RUN echo 'user=$3' >> /root/count.sh
  13. RUN echo 'while :' >> /root/count.sh
  14. RUN echo 'do' >> /root/count.sh
  15. RUN echo 'msg=`mysql -h $1 -P $port -u$user -e "show status like '\''Threads_connected'\'';"|awk '\''NR==2{print$2}'\''`' >> /root/count.sh
  16. RUN echo 'echo [`date "+%Y-%m-%d %H:%M:%S"`] Number of active DB connections $msg |tee /data/log' >> /root/count.sh
  17. RUN echo 'sleep 30' >> /root/count.sh
  18. RUN echo 'done' >> /root/count.sh
  19. CMD bash /root/count.sh $HOST $PORT $USER
  1. # 在Dockerfile所在目录构建
  2. docker build -t counter:v0.1 .
  3. docker images # 获取 IMAGE_ID
  4. docker run -e HOST=47.94.218.68 \
  5. -e PORT=3306 \
  6. -e USER=root \
  7. -e MYSQL_PWD=123456 \
  8. -d IMAGE_ID
  9. docker ps # 获取CONTAINER_ID
  10. docker logs CONTAINER_ID
  11. docker exec -it CONTAINER_ID tail -f /data/log