欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

程序员文章站 2024-03-18 11:04:40
...
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用
以及依赖包到一个可移植的容器中,
然后发布到任何流行的 Linux 机器上,可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口

一、docker的安装与部署

系统环境centos7以上,我这里用的是7.3,从docker的官网上下载下面这两个安装包

yum install -y docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm 
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
systemctl start docker.service
docker version  ###查看docker的版本

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
ip addr可以看到docker0
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

镜像的导入和容器的使用

[root@foundation3 Desktop]# docker load -i game2048.tar   ##导入镜像
[root@foundation3 Desktop]# docker images game2048  ###查看导入的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        20 months ago       55.5 MB
[root@foundation3 Desktop]# docker ps  ###查看docker中运行的进程
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation3 Desktop]# docker ps  -a  ##查看所有进程
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@foundation3 Desktop]# docker run -d --name vm1 game2048  ###开启进程
 ###-d  打入后台运行 --name 起名字
6e85b1ab8defae61dc0139d1790896588281f4d36634765e6e7b38a840551905
[root@foundation3 Desktop]# docker inspect vm1  ##查看进程信息

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
在浏览器输入172.17.0.2,会出来游戏界面
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
同样的方式导入nginx查看

[root@foundation3 ~]# docker load -i nginx.tar
[root@foundation3 ~]# docker images nginx 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              af4b3d7d5401        2 years ago         190 MB
[root@foundation3 ~]# docker run -d  --name vm2 nginx

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
在浏览器查看172.27.0.3:
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
端口映射

[root@foundation3 ~]# docker stop vm2
vm2
[root@foundation3 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6e85b1ab8def        game2048            "/bin/sh -c 'sed -..."   About an hour ago   Up About an hour    80/tcp, 443/tcp     vm1
[root@foundation3 ~]# docker rm vm2
vm2
[root@foundation3 ~]# docker run -d --name vm2 -p 8080:80 nginx
####运行时做端口映射
[root@foundation3 ~]# docker ps

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation3 ~]# docker inspect vm2

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
在浏览器访问172.25.254.3:8080
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

二、从网上获取镜像

配置镜像加速器(阿里云注册登陆查看 https://cr.console.aliyun.com/cn-hangzhou/mirrors
点击产品与服务–>容器镜像服务,点击镜像加速器查看配置文件
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
加速器地址,只要注册了,每个人都有而且不同
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

vim /etc/docker/daemon.json
{               ###这里的地址就是上面所看到的
"registry-mirrors": ["https://6hwuufzo.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation3 ~]# docker stop vm1 
[root@foundation3 ~]# docker stop vm2
[root@foundation3 ~]# docker rm -f vm1
[root@foundation3 ~]# docker rm -f vm2
###结束掉之前的容器
[root@foundation3 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        20 months ago       55.5 MB
nginx               latest              af4b3d7d5401        2 years ago         190 MB
[root@foundation3 ~]# docker rmi game2048   ##删掉镜像
[root@foundation3 ~]# docker rmi nginx    ###删掉镜像
[root@foundation3 ~]# docker search nginx   ###查询镜像
[root@foundation3 ~]# docker pull nginx   ###拉取镜像

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation3 ~]# docker load -i nginx.tar 
cdb3f9544e4c: Loading layer 58.44 MB/58.44 MB
a8c4aeeaa045: Loading layer 54.24 MB/54.24 MB
08d25fa0442e: Loading layer 3.584 kB/3.584 kB
Loaded image: nginx:latest
[root@foundation3 ~]# docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              c82521676580        3 weeks ago         109 MB
[root@foundation3 ~]# docker run -d --name vm1 nginx

还可以编辑默认发布目录,用cp命令

[root@foundation3 ~]# vim index.html
[root@foundation3 ~]# docker cp index.html vm1:/usr/share/nginx/html
[root@foundation3 ~]# docker inspect vm1

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
在浏览器访问:
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

三、数据卷管理

创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录。

[root@foundation3 tmp]# cd docker/
[root@foundation3 docker]# pwd
/tmp/docker
[root@foundation3 docker]# mkdir web
[root@foundation3 ~]# mv index.html /tmp/docker/web/
[root@foundation3 web]# docker stop vm1
[root@foundation3 web]# docker rm -f vm1
[root@foundation3 web]# docker run -d --name vm1 -v /tmp/docker/wed:/usr/share/nginx/html nginx
###将web目录直接挂载到nginx的发布目录

此时修改index.html里的内容,直接会在容器里生效
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
在浏览器访问:
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
可以设置读写权限

docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo:ro  rhel7 bash
###其中data1,读写权限data2设置为只读,将yum源文件也挂在进去

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
data1为默认的读写挂载,而data2是只读挂载,所以不能创建文件,在物理机上touch文件,容器中可以看到
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
备份数据卷 –volumes-from

[aaa@qq.com ~]# docker create --name datavol -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo:ro rhel7 bash
docker run -it --name vm1 --volumes-from datavol rhel7 bash
bash-4.2# ls   
bin   data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  data2  etc  lib   media  opt  root  sbin  sys  usr
bash-4.2# cat /etc/yum.repos.d/yum.repo 
[source7.2]
name=source7.2
baseurl=file:///source7.3
gpgcheck=0

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
对于foreground容器,由于其只是在开发调试过程中短期运行
其用户数据并无保留的必要,因而可以在容器启动时设置–rm选项
这样在容器退出时就能够自动清理容器内部的文件系统

如下在ubuntu环境下打包一个文件
[aaa@qq.com ~]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc
tar: Removing leading `/' from member names
[aaa@qq.com ~]# cd /tmp/backup/
[aaa@qq.com backup]# ls
etc.tar

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

四、创建容器镜像

[root@foundation70 ~]# docker load -i ubuntu.tar 
###导入镜像
[root@foundation70 ~]# docker run -it --name vm1 ubuntu
###先建立一个ubuntu容器,在里面创建文件

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation70 ~]# docker container commit vm1 ubuntu:v1
##完成后commit创建容器镜像v1,并删除vm1
sha256:8e2ee1cb1befd83f4e1d3e349a3c2662952573c52d0707fb99d042997049b737
[root@foundation70 ~]# docker kill vm1
vm1
[root@foundation70 ~]# docker rm vm1
vm1                      

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation70 ~]# docker run --name vm2 -it ubuntu:v1
再次创建容器名字随意,导入v1,查看文件还在

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation70 ~]# docker kill vm2
vm2
[root@foundation70 ~]# docker rm vm2  ## 删除容器的命令是rm
vm2
[root@foundation70 ~]# docker rmi ubuntu:v1   ##删除镜像是rmi

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

五、容器间的互连

--link 参数可以在不映射端口的前提下为两个容器间建立安全连接
--link 参数可以连接一个或多个容器到将要创建的容器。
--link 参数的格式为 --link name:alias
其中 name 是要链接的容器的名称,alias 是这个连接的别名。
[root@foundation70 ~]# docker run -d --name vm1 -p 8080:80 nginx
[root@foundation70 ~]# docker ps -a

docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建

[root@foundation70 ~]# docker run -it --name vm2 --link vm1:nginx ubuntu
###将vm2与vm1做关联

测试:关联的容器可以ping服务nginx
docker容器的安装,创建,数据卷创建,容器关联,容器镜像的创建