Chapter5-Docker数据持久化之Data Volume与Bind Mounting
## Docker Version
[vagrant@docker-node1 ~]$ docker version
Client: Docker Engine - Community
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:28:55 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.2
API version: 1.40 (minimum version
1.12)
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:27:34 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
## Data Volume
[vagrant@docker-node1 ~]$ docker pull mysql:5.7
[vagrant@docker-node1 ~]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 01a52b3b5cd1 2 weeks ago 98.2MB
nginx latest f949e7d76d63 2 weeks ago 126MB
python 2.7 b707c2244b7d 4 weeks ago 886MB
mysql 5.7 383867b75fd2 4 weeks ago 373MB
busybox latest 19485c79a9bb 5 weeks ago 1.22MB
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
[vagrant@docker-node1 ~]$ docker run -d --name mysql1 -e
MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
012b6c9f631221c28d92f62f0886a4338d94b9fbbb1251fc3a9a2f19ba0c107d
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local 6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a
[vagrant@docker-node1 ~]$ docker volume inspect
6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a
[
{
"CreatedAt": "2019-10-13T12:05:05Z",
"Driver": "local",
"Labels": null,
"Mountpoint":
"/var/lib/docker/volumes/6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a/_data",
"Name":
"6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a",
"Options": null,
"Scope": "local"
}
]
[vagrant@docker-node1 ~]$ docker inspect mysql1 | grep
volume
"Type": "volume",
"Source":
"/var/lib/docker/volumes/6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a/_data",
[vagrant@docker-node1 ~]$ docker run -d --name mysql2 -e
MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:5.7
3d479bfb13024e49ada677b89ce9281375264ae89251a56f00fe63977af0fc80
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local 35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122
local 6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a
[vagrant@docker-node1 ~]$ docker volume inspect
35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122
[
{
"CreatedAt": "2019-10-13T12:06:55Z",
"Driver": "local",
"Labels": null,
"Mountpoint":
"/var/lib/docker/volumes/35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122/_data",
"Name":
"35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122",
"Options": null,
"Scope": "local"
}
]
[vagrant@docker-node1 ~]$ docker inspect mysql2 | grep
volume
"Type": "volume",
"Source":
"/var/lib/docker/volumes/35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122/_data",
[vagrant@docker-node1 ~]$ docker rm mysql1 mysql2 -f
mysql1
mysql2
[vagrant@docker-node1 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local 35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122
local 6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a
[vagrant@docker-node1 ~]$ docker volume rm
35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122
6473a31cb9bc919e7ec708ec407eea3
209f959166996000bc5a3fa62e50f087a
35aa338747bf948b3c5929a2ba8cc8b08513f0e1657d9894752fe1d291466122
6473a31cb9bc919e7ec708ec407eea3209f959166996000bc5a3fa62e50f087a
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
[vagrant@docker-node1 ~]$ docker run -d --name mysql1 -e
MYSQL_ALLOW_EMPTY_PASSWORD=true -v mysql:/var/lib/mysql
mysql:5.7
4090f100db6a4ffed864f39481b52fad4cec26b5c3e437ab74d81b1cb91f03f8
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local mysql
[vagrant@docker-node1 ~]$ docker inspect mysql1 | grep
volume
"Type": "volume",
"Source":
"/var/lib/docker/volumes/mysql/_data",
[vagrant@docker-node1 ~]$ docker exec -it mysql1
/bin/bash
root@4090f100db6a:/# mysql
Welcome to the MySQL monitor. Commands end
with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All
rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or
its
affiliates. Other names may be trademarks of their
respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current
input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database docker;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| docker |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> exit
Bye
root@4090f100db6a:/# exit
exit
[vagrant@docker-node1 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4090f100db6a mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up 2
minutes 3306/tcp, 33060/tcp mysql1
[vagrant@docker-node1 ~]$ docker rm mysql1 -f
mysql1
[vagrant@docker-node1 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local mysql
[vagrant@docker-node1 ~]$ docker run -d --name mysql2 -e
MYSQL_ALLOW_EMPTY_PASSWORD=true -v mysql:/var/lib/mysql
mysql:5.7
2ad8482798cfe27d520290b4e3146d1e4ba2090ecca07074adbc136bc29f7409
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local mysql
[vagrant@docker-node1 ~]$ docker exec -it mysql2
/bin/bash
root@2ad8482798cf:/# mysql
Welcome to the MySQL monitor. Commands end
with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All
rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or
its
affiliates. Other names may be trademarks of their
respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current
input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| docker |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> exit
Bye
root@2ad8482798cf:/# exit
exit
## Bind Mounting
[vagrant@docker-node1 ~]$ cd chapter5/labs/docker-nginx/
[vagrant@docker-node1 docker-nginx]$ ls
Dockerfile index.html
[vagrant@docker-node1 docker-nginx]$ cat index.html
Hello Docker!
[vagrant@docker-node1 docker-nginx]$ cat Dockerfile
# this same shows how we can extend/change an existing
official image from Docker Hub
FROM nginx:latest
# highly recommend you always pin versions for anything beyond
dev/learn
WORKDIR /usr/share/nginx/html
# change working directory to root of nginx webhost
# using WORKDIR is prefered to using 'RUN cd /some/path'
COPY index.html index.html
# I don't have to specify EXPOSE or CMD because they're in my
FROM
[vagrant@docker-node1 docker-nginx]$ docker pull nginx
[vagrant@docker-node1 docker-nginx]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sylor9527/flask-redis latest f7187b115207 6 days ago 891MB
redis latest 01a52b3b5cd1 2 weeks ago 98.2MB
nginx latest f949e7d76d63 2 weeks ago 126MB
python 2.7 b707c2244b7d 4 weeks ago 886MB
mysql 5.7 383867b75fd2 4 weeks ago 373MB
busybox latest 19485c79a9bb 5 weeks ago 1.22MB
[vagrant@docker-node1 docker-nginx]$ docker build -t
sylor9527/my-nginx .
[vagrant@docker-node1 docker-nginx]$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
sylor9527/my-nginx latest 589c7ae397f9 4 hours ago 126MB
sylor9527/flask-redis latest f7187b115207 6 days ago 891MB
redis latest 01a52b3b5cd1 2 weeks ago 98.2MB
nginx latest f949e7d76d63 2 weeks ago 126MB
python 2.7 b707c2244b7d 4 weeks ago 886MB
mysql 5.7 383867b75fd2 4 weeks ago 373MB
busybox latest 19485c79a9bb 5 weeks ago 1.22MB
[vagrant@docker-node1 docker-nginx]$ docker run -d -p 80:80
--name web sylor9527/my-nginx
5d91dad7e3e58c0ea60134e4744c4e88804a3ba479cd6e353123207850266bae
[vagrant@docker-node1 docker-nginx]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d91dad7e3e5 sylor9527/my-nginx "nginx -g
'daemon of…" 4 seconds
ago Up 3 seconds 0.0.0.0:80->80/tcp web
[vagrant@docker-node1 docker-nginx]$ curl 127.0.0.1
Hello Docker!
[vagrant@docker-node1 docker-nginx]$ docker rm web -f
web
[vagrant@docker-node1 docker-nginx]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
[vagrant@docker-node1 docker-nginx]$ docker run -d -p 80:80
--name web -v $(pwd):/usr/share/nginx/html
sylor9527/my-nginx da6fd32fc23bf008150474c04bf77d6b52694870168789f9fe914a35712109de
[vagrant@docker-node1 docker-nginx]$ docker exec -it web
/bin/bash
root@da6fd32fc23b:/usr/share/nginx/html# ls
Dockerfile index.html
root@da6fd32fc23b:/usr/share/nginx/html# touch test.txt
root@da6fd32fc23b:/usr/share/nginx/html# exit
exit
[vagrant@docker-node1 docker-nginx]$ ls
Dockerfile index.html test.txt
[vagrant@docker-node1 docker-nginx]$ vi test.txt
[vagrant@docker-node1 docker-nginx]$ sudo vi
test.txt
abc.txt
root@da6fd32fc23b:/usr/share/nginx/html# cat test.txt
abc.txt
root@da6fd32fc23b:/usr/share/nginx/html# exit
exit
[vagrant@docker-node1 docker-nginx]$
!!The End!!