docker-ce的安装:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-edge
yum install docker-ce
进入正在进行的容器方法:
#! /bin/bash
# Use nsenter to access docker
docker_in() {
Name_Id=$1
PID=$(docker inspect -f "{{ .State.Pid }}" $Name_Id)
nsenter --target $PID --mount --uts --ipc --net --pid
}
docker_in $1
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata:
$ docker run -it -v /dbdata --name dbdata ubuntu
root@3ed94f279b6f:/#
查看/dbdata目录:
root@3ed94f279b6f:/# ls
bin boot dbdata dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
然后,可以在其他容器中使用--volumes-from来挂载dbdata容器中的数据卷.
例如创建db1和db2两个容器,并从dbdata容器挂载数据卷:
$ docker run -it --volumes-from dbdata --name db1 ubuntu
$ docker run -it --volumes-from dbdata --name db2 ubuntu
此时,容器db1和db2都挂载同一个数据卷到相同的/dbdata目录。三个容器任何一方在该目录下的写入,其他容器都可以看到。
用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。
如果删除了挂载的容器(包括dbdata、db1和db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
构建自己的镜像:
1,手动构建镜像(方式一):
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest cd5239a0906a 7 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 8 days ago 200 MB
[root@localhost ~]# docker run --name mynginx -it centos
[root@85eda84b5668 /]#
[root@85eda84b5668 /]# rpm -ivh http://download.fedoraproject.org/pub/epel/7/ppc64le/Packages/e/epel-release-7-11.noarch.rpm
Retrieving http://download.fedoraproject.org/pub/epel/7/ppc64le/Packages/e/epel-release-7-11.noarch.rpm
warning: /var/tmp/rpm-tmp.ue5mKo: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:epel-release-7-11 ################################# [100%]
[root@85eda84b5668 /]# yum install nginx
[root@85eda84b5668 /]# vi /etc/nginx/nginx.conf
添加前端启动:daemon off ;
[root@85eda84b5668 /]# exit
exit
[root@localhost ~]#
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85eda84b5668 centos "/bin/bash" 16 minutes ago Exited (0) 46 seconds ago mynginx
[root@localhost ~]#
[root@localhost ~]# docker commit -m "My Nginx" 85eda84b5668 oldboy/mynginx:v1
sha256:0c843695d9c3e4215fd969d9c9a065c4683836204f6ba7186e1fb6b408b79a4d
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oldboy/mynginx v1 0c843695d9c3 17 seconds ago 386 MB
docker.io/nginx latest cd5239a0906a 7 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 8 days ago 200 MB
[root@localhost ~]#
(oldboy 为仓库的名称,mynginx镜像的名称,v1打的一个标签)
接下来启动我做的这个镜像:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
oldboy/mynginx v1 0c843695d9c3 17 seconds ago 386 MB
docker.io/nginx latest cd5239a0906a 7 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 8 days ago 200 MB
[root@localhost ~]# docker run --name mynginxv1 -d -p 81:80 oldboy/mynginx:v1 nginx (这里必须加v1不加的话他就会去找,oldboy/mynginx:laster的镜像,找不到的话,就会去远端下载,nginx表示的是启动命令)
f79352f4de7c6e310c0425b9b9e57c6cecb146cdaf8c207ac7f8f4c1dab5ac2d
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f79352f4de7c oldboy/mynginx:v1 "nginx" 23 seconds ago Up 23 seconds 0.0.0.0:81->80/tcp mynginxv1
[root@localhost ~]#
[root@192 ~]# docker run -it --name volume-test1 -h nginx -v /data centos #-h主机名
[root@nginx /]#
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
614e14bf974c centos "/bin/bash" 15 minutes ago Up 15 minutes volume-test1
[root@192 ~]# docker inspect 614e14bf974c ##将本机的这个目录挂载到docker的/data目录.
"Mounts": [
{
"Type": "volume",
"Name": "851887d1490066427879f14c0ea5295ee8eb56fac8d1dc725960b719fef63075",
"Source": "/var/lib/docker/volumes/851887d1490066427879f14c0ea5295ee8eb56fac8d1dc725960b719fef63075/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
手动创建镜像(把容器做成镜像)
[root@192 _data]#
[root@192 _data]#
[root@192 _data]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff6877fc518a centos "/bin/bash" 22 minutes ago Up 22 minutes nginx-man
[root@192 _data]# docker commit -m "my-nginx" ff6877fc518a liuqi/my-my-nginx:v1
sha256:d51bd3c6a58fcbb3fc0bbd7e24c357ee01baf0a114ddbcadc9010039a78636ed
[root@192 _data]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff6877fc518a centos "/bin/bash" 23 minutes ago Up 23 minutes nginx-man
[root@192 _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liuqi/my-my-nginx v1 d51bd3c6a58f 22 seconds ago 370 MB
docker.io/nginx latest 5699ececb21c 6 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 4 weeks ago 200 MB
[root@192 _data]#
启动手动创建的镜像的容器
[root@192 _data]#
[root@192 _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liuqi/my-my-nginx v1 d51bd3c6a58f 3 minutes ago 370 MB
docker.io/nginx latest 5699ececb21c 6 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 4 weeks ago 200 MB
[root@192 _data]#
[root@192 _data]# docker run -d -p 92:80 liuqi/my-my-nginx #必须加tag标记
Unable to find image 'liuqi/my-my-nginx:latest' locally
Trying to pull repository docker.io/liuqi/my-my-nginx ...
^C
[root@192 _data]# docker run -d -p 92:80 liuqi/my-my-nginx:v1
0ca5069c5b6dbc4175e644333bb81d6f61bea48a74af7b2e716c796666956243
[root@192 _data]#
[root@192 _data]#
[root@192 _data]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ca5069c5b6d liuqi/my-my-nginx:v1 "/bin/bash" 4 minutes ago Exited (0) 4 minutes ago upbeat_saha
[root@192 _data]# docker commit -m "v2" 0ca5069c5b6d liuqi/my-nginx:v2
sha256:db15e701ff3d3f8c3a154507d466a6a16dced9adca46695037b18d4291c6b951
[root@192 _data]#
[root@192 _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
liuqi/my-nginx v2 db15e701ff3d 28 seconds ago 370 MB
liuqi/my-my-nginx v1 d51bd3c6a58f 10 minutes ago 370 MB
docker.io/nginx latest 5699ececb21c 6 days ago 109 MB
docker.io/centos latest 49f7960eb7e4 4 weeks ago 200 MB
[root@192 _data]#