一,环境搭建
1 win 10 搭建 vagrant + virtualbox
1.1 下载工具
1.2 准备 centos7 box
1.3 搭建 centos7 环境
1.3.1 新建一个文件夹用于初始化 vagrant
注:目录不能包含中文
1.3.2 添加 .box 文件到 vagrant
$ vagrant box add centos/7 E:/Docker/virtualbox.box
== > box: Box file was not detected as metadata. Adding it directly.. .
== > box: Adding box 'centos/7' ( v0) for provider:
box: Unpacking necessary files from: file:///E:/Docker/virtualbox.box
box:
== > box: Successfully added box 'centos/7' ( v0) for 'virtualbox' !
AQQJE@aqqje MINGW64 /e/Docker
$ vagrant box list
centos/7 ( virtualbox, 0 )
1.3.3 生成 Vagrantfile 文件
$ vagrant init centos/7
A ` Vagrantfile` has been placed in this directory. You are now
ready to ` vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
` vagrantup.com` for more information on using Vagrant.
1.3.4 配置 Vagrantfile 文件
Vagrant. configure( "2" ) do | config|
config. vm. box = "centos/7"
config. vm. network "public_network"
config. vm. provider "virtualbox" do | vb|
vb. memory = "3000"
vb. name = "aqqje"
vb. cpus = 3
end
end
1.3.5 启动 centos/7 虚拟机
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider.. .
.. .
== > default: Rsyncing folder: /cygdrive/e/Docker/ = > /vagrant
1.3.6 vagrant基本操作
vagrant ssh # 连接当前 vagrant 运行的虚拟机
vagrant status # 查看当前 vagrant 运行的虚拟机
vagrant halt # 停止当前 vagrant 运行的虚拟机
vagrant destroy # 删除当前 vagrant 创建的虚拟机
vagrant reload # 重启当前 vagrant 运行的虚拟机
vagrant ssh-config # 查看当前 vagrant ssh配置信息
##### 1.3.7 配置虚拟 ssh 连接
```bash
# 开启ssh密码连接
vim /etc/ssh/sshd_config
# 设置 passwordAuthentication yes
PasswordAuthentication yes
```bash
[vagrant@localhost ~]$ sudo -i
[root@localhost ~]# vi /etc/ssh/sshd_config
[root@localhost ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:8a:fe:e6 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85626sec preferred_lft 85626sec
inet6 fe80::5054:ff:fe8a:fee6/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:6b:95:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.172/24 brd 192.168.0.255 scope global noprefixroute dynamic eth1
valid_lft 6426sec preferred_lft 6426sec
inet6 fe80::a00:27ff:fe6b:9530/64 scope link
valid_lft forever preferred_lft forever
1.3.8 vagrant box 打包分发
$ vagrant package --output sub-centos.box
== > default: Exporting VM.. .
== > default: Compressing package to: E:/Docker/sub-centos.box
1.3.9 从 vagrant 中移除 .box 文件
$ vagrant box remove centos/7
Removing box 'centos/7' ( v0) with provider 'virtualbox' .. .
AQQJE@aqqje MINGW64 /e/Docker
$ vagrant box list
There are no installed boxes! Use ` vagrant box add ` to add some.
2 使用云服务器
二, 安装Docker - 官网文档
1. 卸载之前的 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装依赖
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3. 配置 docker 仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4. 安装 docker
sudo yum install docker-ce docker-ce-cli containerd.io
sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
5. 启动 docker, 并配置开机启动
sudo systemctl start docker && sudo systemctl enable docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
7. hello world
sudo docker run hello-world
8. docker 基础命令
docker search mysql
docker pull mysql
docker images
docker run -d --name mysql02 -p 3306 :3306 -e MYSQL_ROOT_PASSWORD = root --privileged --default-time_zone= '+8:00' -e TZ = Asia/Shanghai mysql
docker exec -it mysql02 /bin/bash
三, Docker Image and Container
1.1 使用官方 Dockerfile 文件构建 mysql
FROM debian:stretch-slim
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r mysql && useradd -r -g mysql mysql
RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/*
# add gosu for easy step-down from root
ENV GOSU_VERSION 1.7
RUN set -x \
&& apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
&& gpgconf --kill all \
&& rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc \
&& chmod +x /usr/local/bin/gosu \
&& gosu nobody true \
&& apt-get purge -y --auto-remove ca-certificates wget
RUN mkdir /docker-entrypoint-initdb.d
RUN apt-get update && apt-get install -y --no-install-recommends \
# for MYSQL_RANDOM_ROOT_PASSWORD
pwgen \
# for mysql_ssl_rsa_setup
openssl \
# FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db:
# File::Basename
# File::Copy
# Sys::Hostname
# Data::Dumper
perl \
&& rm -rf /var/lib/apt/lists/*
RUN set -ex; \
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME"; \
apt-key list > /dev/null
ENV MYSQL_MAJOR 5.7
ENV MYSQL_VERSION 5.7.28-1debian9
RUN echo "deb http://repo.mysql.com/apt/debian/ stretch mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list
# the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql)
# also, we set debconf keys to make APT a little quieter
RUN { \
echo mysql-community-server mysql-community-server/data-dir select ''; \
echo mysql-community-server mysql-community-server/root-pass password ''; \
echo mysql-community-server mysql-community-server/re-root-pass password ''; \
echo mysql-community-server mysql-community-server/remove-test-db select false; \
} | debconf-set-selections \
&& apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}" && rm -rf /var/lib/apt/lists/* \
&& rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \
&& chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \
# ensure that /var/run/mysqld (used for socket and lock files) is writable regardless of the UID our mysqld instance ends up having at runtime
&& chmod 777 /var/run/mysqld \
# comment out a few problematic configuration values
&& find /etc/mysql/ -name '*.cnf' -print0 \
| xargs -0 grep -lZE '^(bind-address|log)' \
| xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/' \
# don't reverse lookup hostnames, they are usually another container
&& echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/conf.d/docker.cnf
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306 33060
CMD ["mysqld"]
docker build -t my-mysql-image .
1.2 自定义 image
FROM openjdk:8
MAINTAINER aqqje
LABEL name="hello-image" version="1.0" author="aqqje"
COPY dockerfile-demo-0.0.1-SNAPSHOT.jar hello-image.jar
CMD ["java", "-jar", "hello-image.jar"]
docker build -t my-hello .
docker run -d --name my-hello my-hello
docker logs my-hello
curl localhost:8080/dockerfile
curl -d "user=nickwolfe&password=12345" localhost:8080/dockerfile
docker ps | grep my
1.3 image 上传
[ root@aqqje ~]
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: aqqje
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/
Login Succeeded
docker tag my-hello aqqje/my-hello:v1.0
docker push aqqje/my-hello:v1.0
[ root@aqqje ~]
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/
Login Succeeded
docker tag my-hello registry.cn-hangzhou.aliyuncs.com/aqqje/my-hello:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/aqqje/my-hello:v1.0
harbor-offline-installer-v1.7.1.tgz
scp harbor-offline-installer-v1.7.1.tgz aqqje:/data/
tar zxvf harbor-offline-installer-v1.7.1.tgz
sudo yum install docker-compose
hostname = 47.97 .248.78
harbor_admin_password = aqqje
sh install.sh
docker-compose stop
docker-compose start
docker-compose restart
1.4 Docker 基础命令
docker rmi -f imageid
docker rmi -f $( docker images)
docker rm -f $( docker ps -aq)
2,container
2.1 创建带 vim 的 centos 容器
docker run -d -it --name my-centos centos
docker exec -it my-centos /bin/bash
yum install vim
docker commit my-centos vim-centos
docker inspect vim-centos
docker stop/start vim-centos
2.2 容器资源限制
docker top my-centos
docker stats my-centos
docker run -d -it --name centos01 --memory 100M --cpu-shares 10 centos
2.3 图形化资源监控
sudo curl -L git.io/scope -o /usr/local/bin/scope
sudo chmod a+x /usr/local/bin/scope
scope launch
scope stop
scope launch ip1 ip2
2.4 chmod 参数
[ ugao] [ [ +-= ] [ rwx] .. .] [ ,.. .]
[ ugoa] :档案调用权限分三级:档案拥有者,群组,其他
u:档案拥有者
g:群组
o:其他
a:全部
[ +-= ] :
+:增加权限;
-:降低权限;
= :唯一设定权限
[ rwx] :
r:可读
w:可写
x:可执行
四, Docker网络 - 官网解析
1, 网卡
计算机网络中,计算机要能够进行通信硬件支撑,唯一的 MAC 地址
1.1 查看网卡信息
ip link show
ls /sys/class/net
ip a
1.2 网卡配置操作
cd /etc/sysconfig/network-scripts/
ip addr add 192.168 .56.0.61/24 dev eth0
ip addr delete 192.168 .56.61/24 dev eth0
ifup eth0
ifdown eth0
2,network namespace
ip netns add ns1
ip netns list
ip netns delete ns1
ip netns exec ns1 ip a
ip link add veth-ns1 type veth peer name veth-ns2
ip link set veth-ns1 netns ns1
ip link set veth-ns1 netns ns2
ip netns exec ns2 ip link set veth-ns2 up
ip netns exec ns ping 192.168 .0.102
yum install bridge-utils
history | grep centos
3,docker network
自定义的 network, 容器与容器之间可以通过容器名称访问 ,docker0 网络可以在容器启动时通过指定 --link mysql01 来指定可以通过容器名称访问
docker network ls
docker network inspect bridge
docker network create aqqje
docker run -d --name net-tomcat --network aqqje tomcat
docker network connect aqqje-net tomcat01
docker inspect tomcat01
docker network rm aqqje
五, Docker 数据持久化
1, volume
docker volume create aqqje
docker volume ls
docker volume rm volumeId / $( docker volume ls )
docker volume inspect volumeId
docker run -d --name mysql01 -v mysql01_volume:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD = root mysql
docker run -d --name my-tomcat -p 8080 :8080 -v /tmp/aqqje:/usr/local/tomcat/webapps/aqqje tomcat
2, percona-xtradb-cluster - pxc 实战
docker pull percona/percona-xtradb-cluster:5.7.21
docker tag percona/percona-xtradb-cluster:5.7.21 pxc
docker network create --subnet= 172.19 .0.0/24 pxc-net
docker volume create pxc-v1
docker volume create pxc-v2
docker volume create pxc-v3
docker run -d -p 3301 :3306 --name= node1 -v pxc-v1:/var/bin/mysql --net= pxc-net --ip 172.19 .0.2 -e MYSQL_ROOT_PASSWORD = root -e CLUSTER_NAME = PXC -e XTRABACKUP_PASSWORD = aqqje --privileged pxc
docker run -d -p 3302 :3306 --name= node2 -v pxc-v2:/var/bin/mysql --net= pxc-net --ip 172.19 .0.3 -e MYSQL_ROOT_PASSWORD = root -e CLUSTER_NAME = PXC -e XTRABACKUP_PASSWORD = aqqje -e CLUSTER_JOIN = node1 --privileged pxc
docker run -d -p 3303 :3306 --name= node3 -v pxc-v3:/var/bin/mysql --net= pxc-net --ip 172.19 .0.4 -e MYSQL_ROOT_PASSWORD = root -e CLUSTER_NAME = PXC -e XTRABACKUP_PASSWORD = aqqje -e CLUSTER_JOIN = node1 --privileged pxc
3, springboot+mysql+nginx
scp springboot-mybatis-0.0.1-SNAPSHOT.jar aqqje:/Gper/springboot-mybatis/
cat Dockerfile
FROM openjdk:8-jre-apline
MAINTANIER AqqJe
LABEL name = "springboot-mybatis" version = "1.0" author = "AqqJe"
COPY springboot-mybatis-0.0.1-SNAPSHOT.jar springboot-mybatis.jar
CMD [ "java" , "-jar" , "springboot-mybatis.jar" ]
docker build -t sbt-image
docker run -d --name sbt01 -p 8081 :8080 --net= pro-net --ip 172.20 .0.2 sbt-image
docker run -d --name sbt02 -p 8082 :8080 --net= pro-net --ip 172.20 .0.3 sbt-image
docker run -d --name sbt03 -p 8083 :8080 --net= pro-net --ip 172.20 .0.4 sbt-image
cat nginx.conf
user nginx;
worker_processes 1 ;
events {
worker_connections 1024 ;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65 ;
server {
listen 80 ;
location / {
proxy_pass http://balance;
}
}
upstream balance{
server 172.20 .0.2:8080;
server 172.20 .0.3:8080;
server 172.20 .0.4:8080;
}
include /etc/nginx/conf.d/*.conf;
}
docker run -d -p 80 :80 --name pro-nginx -v /tmp/nginx/nginx.conf:/etc/nginx/nginx.conf --net= pro-net --ip 172.20 .0.10 nginx
六,Docker compose 使用 - 官网
1,原生创建 container
1,.1 创建文件夹
mkdir -p /Gper/compose
cd /Gper/compose
1.2, 创建 app.py 文件
[ root@aqqje compose]
import time
import redis
from flask import Flask
app = Flask( __name__)
cache = redis.Redis( host= 'redis' , port = 6379 )
def get_hit_count( ) :
retries = 5
while True:
try:
return cache.incr( 'hits' )
except redis.exceptions.ConnectionError as exc:
if retries == 0 :
raise exc
retries -= 1
time.sleep( 0.5 )
@app.route( '/' )
def hello( ) :
count = get_hit_count( )
return 'Hello World! I have been seen {} times.\n' .format( count)
1.3, 创建 requirements.txt 文件
[ root@aqqje compose]
flask
redis
1.4, 创建 Dockerfile 文件
[ root@aqqje compose]
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0 .0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [ "flask" , "run" ]
1.5,构建当前 Dockerfile 文件生成 image
docker build -t python-app-image .
1.6 拉取 redis image
docker pull redis:alpine
1.7 创建网络
docker network ls
docker network create --subnet= 172.20 .0.0/24 app-net
1.8 运行 python-app-image & redis
docker run -d --name web -p 5000 :5000 --network app-net python-app-image
docker run -d --name redis --network app-net redis:alpine
2, docker compose 创建 container
2.1 安装 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$( uname -s) -$( uname -m) " -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2.2 编写 docker-compose.yaml (默认) 文件
[ root@aqqje compose]
version: '3'
services:
web:
build: .
networks:
- app-net
redis:
image: "redis:alpine"
networks:
- app-net
networks:
app-net:
driver: bridge
2.3 运行 docker-compose.yaml 文件
docker-compose up -d
docker-compose -f docker-compose.yml up -d
2.4 docker-compose 常见操作
docker-compose version
docker-compose up -d
docker-compose ps
docker-compose images
docker-compose stop/start
docker-compose down
docker-compose exec redis sh
docker-compose logs redis
docker-compose -h
七,Docker Swarm - 官网
1,根据 Vagrantfile 创建虚拟环境
boxes = [
{
:name => "manager-node" ,
:eth1 => "192.168.56.11" ,
:mem => "1024" ,
:cpu => "1"
} ,
{
:name => "worker01-node" ,
:eth1 => "192.168.56.12" ,
:mem => "1024" ,
:cpu => "1"
} ,
{
:name => "worker02-node" ,
:eth1 => "192.168.56.13" ,
:mem => "1024" ,
:cpu => "1"
}
]
Vagrant. configure( 2 ) do | config|
config. vm. box = "centos/7"
boxes. each do | opts|
config. vm. define opts[ :name ] do | config|
config. vm. hostname = opts[ :name ]
config. vm. provider "vmware_fusion" do | v|
v. vmx[ "memsize" ] = opts[ :mem ]
v. vmx[ "numvcpus" ] = opts[ :cpu ]
end
config. vm. provider "virtualbox" do | v|
v. customize [ "modifyvm" , :id , "--memory" , opts[ :mem ] ]
v. customize [ "modifyvm" , :id , "--cpus" , opts[ :cpu ] ]
v. customize [ "modifyvm" , :id , "--name" , opts[ :name ] ]
end
config. vm. network :public_network , ip : opts[ :eth1 ]
end
end
end
2,配置 sshd 服务
vagrant ssh manager-node/worker01-node/worker02-node
sudo -i
vi /etc/ssh/sshd_config
修改PasswordAuthentication yes
passwd 修改密码
systemctl restart sshd
3,安装虚拟 Docker engine 【略】
4, 搭建 Swarm 集群
[ vagrant@manager-node ~]
docker swarm init --advertise-addr= 192.168 .0.11
Swarm initialized: current node ( pvj7k2urt8g5k1ucsao2rpiwu) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-2121w9nkk2qsyrgg477bz2jq26iojd5u1agdfa2b0bi8wxi3rk-00octanaf09agpe9v77nsm670 192.168 .0.11:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
5,将 worker01-node,worker02-node 加入 swarm 集群
[ vagrant@worker01-node ~]
docker swarm join --token SWMTKN-1-2121w9nkk2qsyrgg477bz2jq26iojd5u1agdfa2b0bi8wxi3rk-00octanaf09agpe9v77nsm670 192.168 .0.11:2377
[ vagrant@worker02-node ~]
docker swarm join --token SWMTKN-1-2121w9nkk2qsyrgg477bz2jq26iojd5u1agdfa2b0bi8wxi3rk-00octanaf09agpe9v77nsm670 192.168 .0.11:2377
6,docker swarm 常见操作
docker node ls
docker node promote worker01-node
docker node promote worker02-node
docker node demote worker01-node
docker service create --name my-tomcat tomcat
docker service ls
docker service logs my-tomcat
docker service inspect my-tomcat
docker service ps my-tomcat
docker service scale my-tomcat= 3
docker service rm my-tomcat
八, 多机通信overlay网络
1,传统手动方式单机实现
docker run -d --name mysql -v v1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD = examplepass -e MYSQL_DATABASE = db_wordpress mysql:5.6
docker run -d --name wordpress --link mysql -e WORDPRESS_DB_HOST = mysql:3306 -e WORDPRESS_DB_USER = root -e WORDPRESS_DB_PASSWORD = examplepass -e WORDPRESS_DB_NAME = db_wordpress -p 8080 :80 wordpress
docker network inspect bridge
2,docker-compose 单机实现
cat docker-compose.yml
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080 :80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
docker-compose up -d
docker network inspect wordpress-mysql_default
3,docker swarm 集群中实现
[ vagrant@manager-node ~] docker network create -d overlay my-overlay-net
[ vagrant@manager-node ~] docker service create --name mysql --mount type = volume,source= v1,destination= /var/lib/mysql --env MYSQL_ROOT_PASSWORD = examplepass --env MYSQL_DATABASE = db_wordpress --network my-overlay-net mysql:5.6
[ vagrant@manager-node ~] docker service ls
[ vagrant@manager-node ~] docker service ps mysql
[ vagrant@manager-node ~] docker service create --name wordpress --env WORDPRESS_DB_USER = root --env WORDPRESS_DB_PASSWORD = examplepass --env WORDPRESS_DB_HOST = mysql:3306 --env WORDPRESS_DB_NAME = db_wordpress -p 8080 :80 --network my-overlay-net wordpress
[ vagrant@manager-node ~] docker service ls
[ vagrant@manager-node ~] docker service ps mysql
docker network inspect my-overlay-net
4,Routing Mesh - 负载均衡
whoami服务对其他服务暴露的ip是不变的,但是通过whoami名称访问8000端口,确实访问到的是不同的service, 也就是说whoami service对其他服务提供了一个统一的VIP入口,别的服务访问时会做负载均衡。
docker service create --name whoami -p 8000 :8000 --network my-overlay-net -d jwilder/whoami
docker service scale whoami = 3
5,docker Stack - 官网
5.1 新建 service.yml
cat service.yml
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080 :80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
networks:
- ol-net
volumes:
- wordpress:/var/www/html
deploy:
mode: replicated
replicas: 3
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
update_config:
parallelism: 1
delay: 10s
db:
image: mysql:5.7
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
networks:
- ol-net
deploy:
mode: global
placement:
constraints:
- node.role == manager
volumes:
wordpress:
db:
networks:
ol-net:
driver: overlay
5.2 根据service.yml创建service
docker statck deploy -c service.yml my-service
5.3 常见操作
docker stack ls
docker stack services my-service
docker service inspect my-service-db
九,其他
docker run --name mysql57 -p 3306 :3306 -e MYSQL_ROOT_PASSWORD = changle@1999 -e MYSQL_DATABASE = aqqje -e TZ = Asia/Shanghai -d mysql:5.7 --character-set-server= utf8mb4 --collation-server= utf8mb4_unicode_ci --default-time_zone= '+8:00'
MYSQL_ROOT_PASSWORD : 设置mysql数据库root的密码 MYSQL_DATABASE : 启动时创建数据库 TZ=Asia/shanghai : 设置容器时区 character-set-server : 服务器字符集,在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。 character-set-database : 数据库字符集 character-set-table : 数据库表字符集 collation-server : 排序规则字符集 default-time_zone : mysql的时区