Docker

优点:更高效的利用系统资源,同一个IP下的虚拟主机可以运行多个应用,比村通的虚拟机技术更高效; 更快的启动时间,docker无需启动完整的操作系统就可以启动应用服务,相比于虚拟机更快速 一致的运行环境,docker的镜像提供了除内核外完整的运行时环境 持续交付和部署,一次性创建和配置,可以结合持续集成系统完成集成测试,还可以结合持续部署系统完成自动部署

docker安装部署(linux)

  • 检查docker是否已经安装(uname -r),如果安装了执行以下命令删除docker```linux sudo yum remove docker \

    1. docker-client \
    2. docker-client-latest \
    3. docker-common \
    4. docker-latest \
    5. docker-latest-logrotate \
    6. docker-logrotate \
    7. docker-selinux \
    8. docker-engine-selinux \
    9. docker-engine

    ```

  • 安装
    yum install docker

  • ddocker安装后linux 启动 systemctl start docker 守护进程重启 sudo systemctl daemon-reload 重启docker服务 systemctl restart docker 重启docker服务 sudo service docker restart 关闭docker service docker stop 关闭docker systemctl stop docker 设置开机启动 systemctl enable docker.service

  • 设置docker镜像源```java “registry-mirrors”: [“https://pee6w651.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn“]

    1. - 更改docker镜像源后需要执行的命令:```java
    2. sudo systemctl daemon-reload
    3. sudo service docker restart

docker 简单的操作命令

  1. 将正在运行的docker容器内文件复制到物理机上:
    docker cp 容器名:容器内文件路径 物理机路径
  2. docker info:查看运行状态及版本信息的命令
  3. docker pull:下载镜像的命令,从Docker Hub进行拉取
  4. docker save -o [将镜像打成tar包] [所打包的镜像]
    eg: docker save -o /home/nginx.tar nginx:latest
  5. docker load -i [将打包镜像tar包]
    eg: docker load -i nginx.tar
  6. docker tag [镜像ID] [修改后的镜像名称]
  7. docker exec -it [容器名] bash 进入容器中
  8. docker push [镜像名]
  9. docker inspect 容器ID 查看某容器下的配置信息
  10. docker logs -f 容器ID 查看容器运行的实时日志
  11. docker logs -f 容器ID | grep exception 过滤出容器下实时日志信息中的exception信息
  12. 启动容器:docker run -it -p 9000:8080 -p 9001:8085 -v /home/project:/soft —privileged —name myjava java
  13. 退出容器: ctrl+D
  14. 暂停运行的容器:docker pause [容器名称]
  15. 启动暂停的容器:docker unpause [容器名称]
  16. 重新启动容器:docker start -i [容器名称]
  17. 停止容器: docker stop [容器名称]
  18. 删除容器: docker rm [容器名称]
  19. docker创建内部网络:
    1. docker network create net1 docker 的默认网络是172.18.0.xxx
    2. docker network create —subnet=自定义网段
      eg: docker network create —subnet=172.18.0.1/24 net1
    3. docker network inspect net1 docker查询net1网段的信息
    4. docker network rm net1 docker删除网段

Docker修改默认网段

  1. 删除原有配置linux sudo service docker stop sudo ip link set dev docker0 down sudo brctl delbr docker0 sudo iptables -t nat -F POSTROUTING

  2. 创建新的网桥sudo brctl addbr docker0 sudo ip addr add 172.17.10.1/24 dev docker0 sudo ip link set dev docker0 up

  3. 配置Docker的文件vi /etc/docker/daemon.json [root@bogon ~]# cat /etc/docker/daemon.json ##追加的即可 {"registry-mirrors": ["http://224ac393.m.daocloud.io"], "bip": "172.17.10.1/24" } [root@bogon ~]# systemctl restart docker

Docker的使用

docker启动mysql

  1. cur_dir=`pwd`
  2. docker run --name imooc-mysql -v ${cur_dir}/conf:/etc/mysql/conf.d -v ${cur_dir}/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
  3. 其中挂载的conf.d文件的个配置文件,其文件中是对数据库内存储数据的编码定义:
  4. [mysqld]
  5. character-set-server=utf8mb4
  6. [client]
  7. character-set-server=utf8mb4
  8. [mysql]
  9. character-set-server=utf8mb4
  10. docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456

使用docker搭建mysql集群

  1. 第一个mysql
  2. docker run -d -p 3306:3306 -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_NAME=PXC -e XTRABACKUUP_PASSWORD=abc123456 --privileged --name=node1 --net=net1 --ip 172.18.0.2 pxc
  3. 其他的:
  4. docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -e CLUSTER_NAME=PXC -e XTRABACKUUP_PASSWORD=abc123456 --privileged --name=node2 --net=net1 --ip 172.18.0.3 pxc
  5. docker run -d -p 3308:3306 -v v3:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -e CLUSTER_NAME=PXC -e XTRABACKUUP_PASSWORD=abc123456 --privileged --name=node3 --net=net1 --ip 172.18.0.4 pxc
  6. docker run -d -p 3309:3306 -v v4:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -e CLUSTER_NAME=PXC -e XTRABACKUUP_PASSWORD=abc123456 --privileged --name=node4 --net=net1 --ip 172.18.0.5 pxc
  7. docker run -d -p 3310:3306 -v v5:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -e CLUSTER_JOIN=node1 -e CLUSTER_NAME=PXC -e XTRABACKUUP_PASSWORD=abc123456 --privileged --name=node5 --net=net1 --ip 172.18.0.6 pxc
  8. docker run -it -d -p 4001:8888 -p 4002:3306 -v /home/zzx/study:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 haproxy

docker启动nginx

  1. 使用docker方式启动nginx做负载均衡:
  2. 需要挂载的文件有:
  3. 创建文件夹 /opt/nginx/conf、/opt/nginx/conf/conf.d、/opt/nginx/conf/logs
  4. 创建的文件:/opt/nginx/conf/nginx.conf
  5. user nginx;
  6. worker_processes 1;
  7. error_log logs/error.log;
  8. error_log logs/error.log notice;
  9. error_log logs/error.log info;
  10. pid logs/nginx.pid;
  11. events {
  12. worker_connections 1024;
  13. }
  14. http {
  15. include /etc/nginx/mime.types;
  16. default_type application/octet-stream;
  17. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  18. '$status $body_bytes_sent "$http_referer" '
  19. '"$http_user_agent" "$http_x_forwarded_for"';
  20. access_log logs/access.log main;
  21. sendfile on;
  22. #tcp_nopush on;
  23. tcp_nopush on;
  24. #keepalive_timeout 0;
  25. keepalive_timeout 65;
  26. #gzip on;
  27. gzip on;
  28. gzip_min_length 100;
  29. gzip_comp_level 2;
  30. gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  31. include vhost/*.conf;
  32. # another virtual host using mix of IP-, name-, and port-based configuration
  33. #
  34. #server {
  35. # listen 8000;
  36. # listen somename:8080;
  37. # server_name somename alias another.alias;
  38. # location / {
  39. # root html;
  40. # index index.html index.htm;
  41. # }
  42. #}
  43. # HTTPS server
  44. #
  45. #server {
  46. # listen 443 ssl;
  47. # server_name localhost;
  48. # ssl_certificate cert.pem;
  49. # ssl_certificate_key cert.key;
  50. # ssl_session_cache shared:SSL:1m;
  51. # ssl_session_timeout 5m;
  52. # ssl_ciphers HIGH:!aNULL:!MD5;
  53. # ssl_prefer_server_ciphers on;
  54. # location / {
  55. # root html;
  56. # index index.html index.htm;
  57. # }
  58. #}
  59. #设置负载均衡的IP地址,默认的负载均衡规则:轮询
  60. upstream nacosserver{
  61. server 10.2.11.64:8848;
  62. server 10.2.11.66:8848;
  63. }
  64. include /etc/nginx/conf.d/*.conf;
  65. }
  66. /opt/nginx/mime.types
  67. types {
  68. text/html html htm shtml;
  69. text/css css;
  70. text/xml xml;
  71. image/gif gif;
  72. image/jpeg jpeg jpg;
  73. application/javascript js;
  74. application/atom+xml atom;
  75. application/rss+xml rss;
  76. text/mathml mml;
  77. text/plain txt;
  78. text/vnd.sun.j2me.app-descriptor jad;
  79. text/vnd.wap.wml wml;
  80. text/x-component htc;
  81. image/png png;
  82. image/svg+xml svg svgz;
  83. image/tiff tif tiff;
  84. image/vnd.wap.wbmp wbmp;
  85. image/webp webp;
  86. image/x-icon ico;
  87. image/x-jng jng;
  88. image/x-ms-bmp bmp;
  89. application/font-woff woff;
  90. application/java-archive jar war ear;
  91. application/json json;
  92. application/mac-binhex40 hqx;
  93. application/msword doc;
  94. application/pdf pdf;
  95. application/postscript ps eps ai;
  96. application/rtf rtf;
  97. application/vnd.apple.mpegurl m3u8;
  98. application/vnd.google-earth.kml+xml kml;
  99. application/vnd.google-earth.kmz kmz;
  100. application/vnd.ms-excel xls;
  101. application/vnd.ms-fontobject eot;
  102. application/vnd.ms-powerpoint ppt;
  103. application/vnd.oasis.opendocument.graphics odg;
  104. application/vnd.oasis.opendocument.presentation odp;
  105. application/vnd.oasis.opendocument.spreadsheet ods;
  106. application/vnd.oasis.opendocument.text odt;
  107. application/vnd.openxmlformats-officedocument.presentationml.presentation
  108. pptx;
  109. application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  110. xlsx;
  111. application/vnd.openxmlformats-officedocument.wordprocessingml.document
  112. docx;
  113. application/vnd.wap.wmlc wmlc;
  114. application/x-7z-compressed 7z;
  115. application/x-cocoa cco;
  116. application/x-java-archive-diff jardiff;
  117. application/x-java-jnlp-file jnlp;
  118. application/x-makeself run;
  119. application/x-perl pl pm;
  120. application/x-pilot prc pdb;
  121. application/x-rar-compressed rar;
  122. application/x-redhat-package-manager rpm;
  123. application/x-sea sea;
  124. application/x-shockwave-flash swf;
  125. application/x-stuffit sit;
  126. application/x-tcl tcl tk;
  127. application/x-x509-ca-cert der pem crt;
  128. application/x-xpinstall xpi;
  129. application/xhtml+xml xhtml;
  130. application/xspf+xml xspf;
  131. application/zip zip;
  132. application/octet-stream bin exe dll;
  133. application/octet-stream deb;
  134. application/octet-stream dmg;
  135. application/octet-stream iso img;
  136. application/octet-stream msi msp msm;
  137. audio/midi mid midi kar;
  138. audio/mpeg mp3;
  139. audio/ogg ogg;
  140. audio/x-m4a m4a;
  141. audio/x-realaudio ra;
  142. video/3gpp 3gpp 3gp;
  143. video/mp2t ts;
  144. video/mp4 mp4;
  145. video/mpeg mpeg mpg;
  146. video/quicktime mov;
  147. video/webm webm;
  148. video/x-flv flv;
  149. video/x-m4v m4v;
  150. video/x-mng mng;
  151. video/x-ms-asf asx asf;
  152. video/x-ms-wmv wmv;
  153. video/x-msvideo avi;
  154. }
  155. /opt/nginx/conf/conf.d/default.conf
  156. server {
  157. #使用docker启动nginx会设置映射服务器端口与镜像端口,若在配置稳在中配置会互相矛盾,导致#设置的负载均衡不成功
  158. #设置监听端口,
  159. listen 80;
  160. #在docker中的IP使用 局域网IP或者公网IP,不能使用localhost或127.0.0.1
  161. server_name 172.0.0.1;
  162. #charset koi8-r;
  163. #access_log /var/log/nginx/host.access.log main;
  164. location / {
  165. #proxy_set_header Host $host;
  166. #proxy_set_header X-Real-IP $remote_addr;
  167. #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  168. proxy_buffering off;
  169. #这里设置URL
  170. proxy_pass http://nacosserver/nacos/;
  171. }
  172. #error_page 404 /404.html;
  173. # redirect server error pages to the static page /50x.html
  174. #
  175. error_page 500 502 503 504 /50x.html;
  176. location = /50x.html {
  177. root /usr/share/nginx/html;
  178. }
  179. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  180. #
  181. #location ~ \.php$ {
  182. # proxy_pass http://127.0.0.1;
  183. #}
  184. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  185. #
  186. #location ~ \.php$ {
  187. # root html;
  188. # fastcgi_pass 127.0.0.1:9000;
  189. # fastcgi_index index.php;
  190. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  191. # include fastcgi_params;
  192. #}
  193. # deny access to .htaccess files, if Apache's document root
  194. # concurs with nginx's one
  195. #
  196. #location ~ /\.ht {
  197. # deny all;
  198. #}
  199. }
  200. 启动nginx镜像:
  201. docker run -it -d -p 8840:80 -v /opt/nginx/conf:/etc/nginx --name nginx 10.3.0.171/library/nginx:1.15.7