1.2 Docker容器详解以及使用

Dockers简介

软件开发中最为麻烦的事情可能就是配置环境了。由于用户使用的操作系统具有多样性,即便是使用跨平台的开发语言都不能保证代码能够在各种平台下都可以正常运转,而且可能在不同的环境下我们的软件需要依赖的其他软件包也是不一样的。

Docker属于对Linux容器技术的一种封装(利用了Linux的namespace和cgroup技术),它提供了简单易用的容器使用接口,是目前最为流行的Linux容器解决方案。Docker将应用程序与该应用程序的依赖打包在一个文件里面,运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里面运行,就好像在真实的物理机上运行一样。有了Docker就再也不用担心环境问题了。

目前,Docker主要用于以下几个方面:

  1. 提供一次性的环境。
  2. 提供弹性的云服务(利用Docker很容易的实现扩容和收缩)。
  3. 实践微服务架构(隔离真是环境在容器中运行多个服务)。

我们通过以下拓扑图来解释Docker详解容器的作用以及使用方法。

在这里插入图片描述
Dockers容器是以镜像为中心的,我们可以通过以下方法来使用Dockers容器:
1、pull:从仓库下载镜像
2、run:运行镜像,使其成为一个容器
3、commit:将容器制作成一个镜像
4、build:通过Docker file(代码)构建一个镜像文件
5、save:将镜像压缩为tar文件保存
6、load:将tar文件转换为镜像使用
7、push:去仓库注册上传

构造nginx容器详解以上方法

1、开启docker服务

[root@localhost ~]# docker run -d -p 80:80 nginxsystemctl start docker

2、下载nginx镜像(pull)

[root@localhost ~]# docker run -d -p 80:80 nginxdocker pull nginx

3、查看是否下载成功

[root@localhost ~]# docker run -d -p 80:80 nginxdocker images

4、然后将镜像运行成一个容器

[root@localhost ~]# docker run -d -p 80:80 nginx
982b997f1cb47b2fded4e962f21d9304d5a269dd3c189721b5161f2844269932

下边是以映射文件的方法运行容器。

[root@localhost ~]# docker run -d -p 88:80 --name mynginx -v `pwd`:/usr/share/nginx/html nginx:1.13

这里的参数的作用为:
-d:后台运行
-p:指定端口映射,内部端口80与外部端口80建立映射关系
命令运行后下面的一串字符代表运行的容器的ID
–name指定名字为mynginx
-v指定映射文件
nginx:1.13为指定镜像版本,如果不指定则默认为最新版

5、查看正在运行的容器

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
982b997f1cb4        nginx               "nginx -g 'daemon ..."   2 minutes ago       Up 2 minutes        0.0.0.0:80->80/tcp   vigilant_davinci

当然我们可以映射多个端口,81:80
6、这是就讲容器运行起来了(run),我们可以通过以下命令对容器进行修改,虽然容器ID很长,但是我们通过几个简单的能够识别容器的字符就行

[root@localhost ~]# docker exec -it 98 bash
root@982b997f1cb4:/# 

7、进来以后我们通过ls查看可以发现,容器就类似于一个虚拟机

root@982b997f1cb4:/# ls
bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
boot  etc  lib	 media	opt  root  sbin  sys  usr

8、找到默认的index.html文件

root@982b997f1cb4:/# cd /usr/share/nginx/html/
root@982b997f1cb4:/usr/share/nginx/html# ls
50x.html  index.html
root@982b997f1cb4:/usr/share/nginx/html# cat index.html

9、修改index.html文件

root@982b997f1cb4:/usr/share/nginx/html# echo 'hello world' > index.html
root@982b997f1cb4:/usr/share/nginx/html# cat index.html
hello world

10、这时通过IP地址进入网页查看就可以发现,页面已经变为hello world了

11、镜像另存为并指定镜像名字,再查看镜像后发现已经有了名为m1的镜像,同样的这个镜像和我们所下载的镜像没有什么不同,这个镜像也可以运行起来作为一个容器使用。(commit)

[root@localhost ~]# docker commit 98 m1
sha256:3f2294741b3b39f15e3c0e0cc245873f7ece00ed183030035696c3b3d4400e6d
[root@localhost ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
m1                      latest              3f2294741b3b        11 seconds ago      126 MB

12、这样就制作了一个镜像了,还有另一种方式就是用Docker file的方式创建镜像。

[root@localhost ~]# vim index.html

在文件里编辑内容如下(build)

FROM nginx
#FROM指定Docker构建的基础镜像
ADD ./ /usr/share/nginx/html/
#将当前目录下的所有文件拷贝到/usr/share/nginx/html/下

然后我们在当前目录下创建一个index.html的文件

[root@localhost ~]# vim index.html

在这个文件中随便编辑一点内容

wai bu de wenjian

然后通过以下命令构建镜像( . 指定为当前目录下的docker file 文件)

[root@localhost ~]# docker build -t m2 .
Sending build context to Docker daemon 610.2 MB
Step 1/2 : FROM nginx
 ---> 540a289bab6c
Step 2/2 : ADD ./ /usr/share/nginx/html/
 ---> e29a14c222bc
Removing intermediate container a3a39c54bc48
Successfully built e29a14c222bc

这样一个名为m2的镜像就构建完成了,运行它

[root@localhost ~]# docker run -d -p 100:80 m2
221569f2a0b8c23a86cf8ebc490eac58b01b5713dcf80432e5fdfdd4e7e17627

然后我们可以通过本地浏览器指定端口访问这个网页:192.168.220.128:100
这时我们也完成了通过Docker file构建了一个镜像文件

13、我们还可以通过以下命令将一个镜像保存到文件里(save)

[root@localhost ~]# docker save m1 >1.tar

查看后发现已经有了这个1.tar文件

14、同样我们可以通过命令将上面保存的文件导入到docker镜像中(load)

[root@localhost ~]# docker load < 1.tar
3792108897fc: Loading layer 14.85 kB/14.85 kB
Loaded image: m1:latest

15、push需要去仓库注册上传,这里不再赘述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章