Docker简介、Docker基本管理命令、如何从网上获取Docker镜像、Docker数据卷挂载、Docker间互联

Docker简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:

    dockerClient客户端
    Docker Daemon守护进程
    Docker Image镜像
    DockerContainer容器 

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
这里写图片描述

一、安装docker

注:需linux系统为7.3版本的才可下载

yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm -y

打开docker

[root@foundation10 Desktop]# systemctl start docker

二、docker基本管理命令

查看容器进程

查看在运行的容器进程
[root@foundation10 Desktop]# docker ps
查看未开启的容器进程
[root@foundation10 Desktop]# docker ps -a

这里写图片描述
删除容器

删除容器
docker kill vm1    ##强制删除
docker rm vm1
如果镜像被容器使用,需要强制删除
docker rm -f vm1
停止容器的2种方式
[root@foundation10 docker]# docker container stop vm2
[root@foundation10 docker]# docker stop vm1

这里写图片描述

查看docker版本信息

[root@foundation10 Desktop]# docker version

这里写图片描述
运行镜像

解压镜像
[root@foundation10 Desktop]# docker load -i game2048.tar
打入后台运行镜像  -d 打入后台 
[root@foundation10 Desktop]# docker run -d --name vm1 game2048
交互式运行镜像 -it 交互式
[root@foundation10 docker]# docker run -it --name vm2 rhel7 bash

这里写图片描述
这里写图片描述
查看dockerIP

查看docker网卡
[root@foundation10 Desktop]# ip addr
查看docker详情(在最后查看IP以做浏览器访问测试)
[root@foundation10 Desktop]# docker inspect vm1

这里写图片描述
浏览器访问172.17.0.2(这里是通过解压game2048.tar镜像然后运行docker,查看IP,接着访问的)
这里写图片描述
删除所有停止了,但后台还有进程的容器

方法一:
[root@foundation10 docker]# docker ps    ##这里进程
[root@foundation10 docker]# docker ps -a   ##这里有进程
[root@foundation10 docker]# docker container prune 
方法二:
[root@foundation10 netns]# docker rm -f `docker ps -aq`
[root@foundation10 netns]# docker ps -a

这里写图片描述
端口映射 通过nat的方式走的 在外网查看网址为172.25.254.10:8080

这里要先解压nginx镜像然后以打入后台的方式运行
[root@foundation10 docker]# docker run -d --name vm2 -p 8080:80 nginx  
查看IP:新建vm2后IP172.17.0.2
[root@foundation10 docker]# docker inspect vm2
                    "IPAddress": "172.17.0.3",  

这里写图片描述

退出容器

当容器在交互式运行时
ctrl+d  退出容器
ctrl+pq 退出容器但不结束进程

连接未结束进程的交互式容器

[root@foundation10 ns]# docker container attach vm3

查看本地的镜像

[root@foundation10 docker]# docker images

数据卷的管理命令

查看-v挂载产生的数据卷
[root@foundation10 ~]# docker volume ls
清空所有数据卷
docker volume rm `docker volume ls -q`
删除单个数据卷
[root@foundation10 ~]# docker volume rm **  #**表示那一长串VOLUME NAME

这里写图片描述

二、网上获取镜像

镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是
增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。
镜像默认可以从 docker hub 上下载,这是 docker 官方的公共仓库,为我们免费提供了大量
已经容器化的应用镜像,避免我们重复的去造轮子。但是官方并没有在国内部署服务器,
如果你不走 vpn 的话真的是太慢了,报错和超时让人非常的郁闷。
于是我们可以通过在阿里云官网配置镜像加速器来下载镜像,很快。
镜像命令

# docker search  查询镜像
# docker pull    拉取镜像
# docker push    推送镜像

1、配置镜像加速器(阿里云注册登陆查看 https://cr.console.aliyun.com/cn-hangzhou/mirrors
根据官网指导来做

[root@foundation10 docker]# cd /etc/docker/   ##这个目录需要自己建
[root@foundation10 docker]# ls
key.json
[root@foundation10 docker]# vim daemon.json
[root@foundation10 docker]# cat daemon.json 
{
  "registry-mirrors": ["https://utjfhp8l.mirror.aliyuncs.com"]
}
[root@foundation10 docker]# sudo systemctl daemon-reload
[root@foundation10 docker]# sudo systemctl restart docker

这里写图片描述
2、拉取镜像
删除之前后台的进程

[root@foundation10 docker]# docker ps
[root@foundation10 docker]# docker ps -a
[root@foundation10 docker]# docker container prune 

这里写图片描述
这里写图片描述
查询镜像,找到自己需要的镜像

[root@foundation10 docker]# docker search nginx

下载镜像

拉取镜像
[root@foundation10 docker]# docker pull nginx
查看镜像
[root@foundation10 docker]# docker images nginx

这里写图片描述

运行nginx

运行nginx
[root@foundation10 docker]# docker run -d --name vm1 nginx
查看nginx信息
[root@foundation10 docker]# docker history nginx

这里写图片描述
3、在docker中修改nginx的默认发布文件
方法一:将默认发布内容传到vm1 nginx的默认发布目录下

[root@foundation10 ~]# vim index.html
<h1>www.westos.org</h1>
[root@foundation10 ~]# docker cp index.html vm1:/usr/share/nginx/html

浏览器访问172.17.0.2查看
这里写图片描述

方法二:将镜像远程挂载到本机上,通过在本机上直接修改默认发布内容来发布

[root@foundation10 ~]# mkdir /tmp/docker
[root@foundation10 ~]# cd /tmp/docker/
[root@foundation10 docker]# mkdir web
[root@foundation10 docker]# cd web/
[root@foundation10 web]# vim index.html
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
<h1>www.westos.org</h1>
[root@foundation10 ~]# docker run -d --name vm1 -v /tmp/docker/web:/usr/share/nginx/html nginx
这里因为前面方法一调用过vm1,所以需要删除vm1,才能运行
[root@foundation10 ~]# docker rm -f vm1
[root@foundation10 ~]# docker run -d --name vm1 -v /tmp/docker/web:/usr/share/nginx/html nginx

这里写图片描述
浏览器访问172.17.0.2查看
这里写图片描述

三、数据卷挂载

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

默认挂载可以读写数据卷,也可以只读挂载:这里data1可以读写,data2和yum源目录只读挂载
[root@foundation10 ~]# docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 bash
-v 参数可以重复使用,挂载多个数据卷到容器中,冒号前面的是宿主机的目录(本地目录
不存在 docker 会自动创建),冒号后面的是容器中的挂载目录。
注:docker commit 时卷的数据不会被保存。
bash-4.2# df
bash-4.2# ls -l
bash-4.2# cd /etc/yum.repos.d/
bash-4.2# cat rhel-dvd.repo 
bash-4.2# yum repolist
bash-4.2# cd /data2
bash-4.2# touch file
touch: cannot touch 'file': Read-only file system
bash-4.2# cd /data1/
bash-4.2# touch file1
bash-4.2# ls
file1

这里写图片描述
2、数据卷容器:

停止vm1
[root@foundation10 web]# docker rm -f vm1
创建vm1
[root@foundation10 web]# docker create --name datavol -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 bash
运行vm1
[root@foundation10 web]# docker run -it --name vm1 --volumes-from datavol rhel7 bash

这里写图片描述

3、备份数据卷:

解压ubuntu镜像
[root@foundation10 web]# cd /home/kiosk/Desktop/docker/
[root@foundation10 docker]# docker load -i ubuntu.tar
数据卷备份 
[root@foundation10 docker]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc
[root@foundation10 docker]# cd /tmp/backup/
[root@foundation10 backup]# ls
etc.tar

这里写图片描述

以上是 -v 参数后面加本地目录的情况,如果不加系统目录,直接将数据卷挂载到容器中呢?

如果-v后面不跟系统目录 容器会帮我们自动分配,挂载数据卷
实验一:

[root@foundation10 ~]# docker run -it --name vm1 -v /data1 ubuntu
ctrl+pq退出,用df查看挂载的数据卷
root@dbd22d30f018:/# [root@foundation10 ~]# df
查看数据卷
[root@foundation10 ~]# docker volume ls

这里写图片描述
进到挂载目录读写操作

查看地址
[root@foundation10 ~]# docker inspect vm1 | grep vol
进到目录
[root@foundation10 ~]# cd /var/lib/docker/volumes/b3e61f528cf83e7269e19943741d0a71e03922cc33930441a8d25891fa5dad66/_data
[root@foundation10 _data]# ls
复制其他内容到该目录
[root@foundation10 _data]# cp /etc/passwd .
[root@foundation10 _data]# ls
passwd
此时在另一个shell中连接vm1,在data目录能够看到复制的文件
[root@foundation10 ~]# docker container attach vm1
root@dbd22d30f018:/# cd data1/
root@dbd22d30f018:/data1# ls
passwd

这里写图片描述
实验二:

先将vm1和数据卷删除
docker rm -f vm1
[root@foundation10 ~]# docker volume rm **  ()这里的**是用docker volume ls 查看的vm1的volume name
挂载数据卷
[root@foundation10 ~]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
查看容器
[root@foundation10 ~]# docker ps
查看vm2的数据卷地址
[root@foundation10 ~]# docker inspect vm2 | grep vol
[root@foundation10 ~]# cd /var/lib/docker/volumes/2ebded2d6e5f1d1a81a2226db1fd1815dfeeb0c46c6c124c308d1b71d33bb572/_data
[root@foundation10 _data]# ls
50x.html  index.html

这里写图片描述

删除数据卷
[root@foundation10 ~]# docker volume rm 2ebded2d6e5f1d1a81a2226db1fd1815dfeeb0c46c6c124c308d1b71d33bb572
便不能进入数据卷目录了

这里写图片描述

把静态数据放进镜像 ,镜像挂载到容器的使用,结合Dockerfile看下一篇博客

四、容器间互联

–link 参数可以在不映射端口的前提下为两个容器间建立安全连接, –link 参数可以连接一个
或多个容器到将要创建的容器。
–link 参数的格式为 –link vm1:nginx,其中 name 是要链接的容器的名称,nginx 是这个连
接的别名。
容器端口映射

[root@foundation10 netns]# docker run -d --name vm1 -p 8080:80 nginx

Docker 的端口映射是由 iptables 来实现的:

[root@foundation10 netns]# iptables -t nat -nL
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80

容器间互联

[root@foundation10 netns]# docker run -it --name vm2 --link vm1:nginx ubuntu
root@d739ad574ab1:/# env   
root@d739ad574ab1:/# cat /etc/hosts

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值