Docker
优点:更高效的利用系统资源,同一个IP下的虚拟主机可以运行多个应用,比村通的虚拟机技术更高效; 更快的启动时间,docker无需启动完整的操作系统就可以启动应用服务,相比于虚拟机更快速 一致的运行环境,docker的镜像提供了除内核外完整的运行时环境 持续交付和部署,一次性创建和配置,可以结合持续集成系统完成集成测试,还可以结合持续部署系统完成自动部署
docker安装部署(linux)
检查docker是否已经安装(uname -r),如果安装了执行以下命令删除docker```linux sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
```
安装
yum install dockerddocker安装后
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“]
- 更改docker镜像源后需要执行的命令:```java
sudo systemctl daemon-reload
sudo service docker restart
docker 简单的操作命令
- 将正在运行的docker容器内文件复制到物理机上:
docker cp 容器名:容器内文件路径 物理机路径 - docker info:查看运行状态及版本信息的命令
- docker pull:下载镜像的命令,从Docker Hub进行拉取
- docker save -o [将镜像打成tar包] [所打包的镜像]
eg: docker save -o /home/nginx.tar nginx:latest - docker load -i [将打包镜像tar包]
eg: docker load -i nginx.tar - docker tag [镜像ID] [修改后的镜像名称]
- docker exec -it [容器名] bash 进入容器中
- docker push [镜像名]
- docker inspect 容器ID 查看某容器下的配置信息
- docker logs -f 容器ID 查看容器运行的实时日志
- docker logs -f 容器ID | grep exception 过滤出容器下实时日志信息中的exception信息
- 启动容器:docker run -it -p 9000:8080 -p 9001:8085 -v /home/project:/soft —privileged —name myjava java
- 退出容器: ctrl+D
- 暂停运行的容器:docker pause [容器名称]
- 启动暂停的容器:docker unpause [容器名称]
- 重新启动容器:docker start -i [容器名称]
- 停止容器: docker stop [容器名称]
- 删除容器: docker rm [容器名称]
- docker创建内部网络:
- docker network create net1 docker 的默认网络是172.18.0.xxx
- docker network create —subnet=自定义网段
eg: docker network create —subnet=172.18.0.1/24 net1 - docker network inspect net1 docker查询net1网段的信息
- docker network rm net1 docker删除网段
Docker修改默认网段
删除原有配置
linux sudo service docker stop sudo ip link set dev docker0 down sudo brctl delbr docker0 sudo iptables -t nat -F POSTROUTING
创建新的网桥
sudo brctl addbr docker0 sudo ip addr add 172.17.10.1/24 dev docker0 sudo ip link set dev docker0 up
配置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
cur_dir=`pwd`
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
其中挂载的conf.d文件的个配置文件,其文件中是对数据库内存储数据的编码定义:
[mysqld]
character-set-server=utf8mb4
[client]
character-set-server=utf8mb4
[mysql]
character-set-server=utf8mb4
docker run -d -p 3307:3306 -v v2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456
使用docker搭建mysql集群
第一个mysql:
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
其他的:
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
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
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
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
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
使用docker方式启动nginx做负载均衡:
需要挂载的文件有:
创建文件夹 /opt/nginx/conf、/opt/nginx/conf/conf.d、/opt/nginx/conf/logs
创建的文件:/opt/nginx/conf/nginx.conf:
user nginx;
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
gzip on;
gzip_min_length 100;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
include vhost/*.conf;
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
#设置负载均衡的IP地址,默认的负载均衡规则:轮询
upstream nacosserver{
server 10.2.11.64:8848;
server 10.2.11.66:8848;
}
include /etc/nginx/conf.d/*.conf;
}
/opt/nginx/mime.types
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
application/font-woff woff;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
/opt/nginx/conf/conf.d/default.conf
server {
#使用docker启动nginx会设置映射服务器端口与镜像端口,若在配置稳在中配置会互相矛盾,导致#设置的负载均衡不成功
#设置监听端口,
listen 80;
#在docker中的IP使用 局域网IP或者公网IP,不能使用localhost或127.0.0.1
server_name 172.0.0.1;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
#这里设置URL
proxy_pass http://nacosserver/nacos/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
启动nginx镜像:
docker run -it -d -p 8840:80 -v /opt/nginx/conf:/etc/nginx --name nginx 10.3.0.171/library/nginx:1.15.7