####Docker容器搭建及简单应用####

###Docker简介###

  • Docker 是一个开源的应用容器引擎
  • Docker 可以让开发者将所有应用软件以及它的以来打包成软件开发的标准化单元
  • 开发者打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。就好像 Java 虚拟机一样,“一次编写,到处运行(Write once, run anywhere)”,而 Docker 是“一次构建,到处运行(Build once,run anywhere)”。

在这里插入图片描述

  • 一个完整的Docker有以下几个部分组成:

    DockerClient客户端
    Docker Daemon守护进程
    Docker Image镜像
    DockerContainer容器 [2]

  • Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
    Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互
    架构图:
    在这里插入图片描述
    Docker 的优点

轻量级:所有容器在一台机器上共享同一个操作系统内核,这样他们立即开始,并更有效地利用内存。Image 是从分层文件系统的构建,这样他们能够共享公共文件,使得磁盘使用率和 Image 的下载更加高效。

开放:Docker 容器是基于开发的标准,允许容器运行在主流的 Linux 发布版和 Microsoft 操作系统作为所有的基础设施。

安全:容器使得应用程序彼此隔离,而基础架构同时为应用程序提供了额外的保护层。

###Docker 与 虚拟机的区别###
容器与虚拟机有着类似的资源隔离和分配的优点,但不同的架构方法使容器能够更加便携,高效等。

在这里插入图片描述每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统(Guest OS),尽管它们被分离,它们共享并利用主机的硬件资源,将近需要十几个 GB 的大小。
容器包括应用程序及其所有的依赖,但与其他容器共享内核。它们以独立的用户空间进程形式运行在主机操作系统上。他们也不依赖于任何特定的基础设施,Docker 容器可以运行在任何计算机上,任何基础设施和任何云上。

Docker 的容器利用了 LXC,管理利用了 namespaces 来做权限的控制和隔离,cgroups 来进行资源的配置,并且还通过 aufs 来进一步提高文件系统的资源利用率,而这些技术都不是 Docker 独创。

LXC

LXC 与虚拟机的不同之处在于,它是一个操作系统级别的虚拟化环境,而不是硬件虚拟化环境。他们都做同样的事情,但 LXC 是操作系统级别的虚拟化环境,虚拟环境有它自己的进程和网络空间,而不是创建一个完整成熟的虚拟机。因此,一个 LXC 虚拟操作系统具有最小的资源需求,并启动只需几秒钟。
在这里插入图片描述

###Docker的部署安装###
1.配置7.5镜像的yum 源,便于解决依赖性(9850个软件包)
官方网站:https://docs.docker.com/
阿里云开源镜像网站:http://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/
软件包列表:
docker-ce-18.09.6-3.el7.x86_64.rpm
docker-ce-cli-18.09.6-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm
container-selinux-2.21-1.el7.noarch.rpm

[rhel7.5]  ##5099个安装包
name=rhel7.5
baseurl=http://172.25.3.250/rhel7.5
gpgcheck=0

安装软件解决依赖性:

 yum install -y docker-ce-18.09.6-3.el7.x86_64.rpm 
 docker-ce-cli-18.09.6-3.el7.x86_64.rpm 
 containerd.io-1.2.5-3.1.el7.x86_64.rpm 
 container-selinux-2.21-1.el7.noarch.rpm
[root@server2 docker]# systemctl start docker   ##启动docker,设置开机自启
[root@server2 docker]# systemctl enable docker
[root@server2 ~]# yum install -y bash-*  #安装tab自动补齐的软件包
[root@server2 ~]# docker images  查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

[root@server2 ~]# sysctl -a | grep iptable
net.bridge.bridge-nf-call-iptables = 1
[root@server2 ~]# ip addr ##docker安装好后系统会自动分配一个docker 的ip
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:dd:c6:a7:37 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
[root@server2 ~]# docker version ##查看docker 的版本信息
在这里插入图片描述
[root@server2 ~]# docker info ##查看docker宿主机信息

在这里插入图片描述

##镜像的导入和容器使用##
简单搭建一个2048小游戏
获取一个容器镜像,导入到docker 引擎

[root@server2 ~]# ls
game2048.tar   ##镜像
[root@server2 ~]# docker load -i game2048.tar    ##导入镜像
011b303988d2: Loading layer   5.05MB/5.05MB
36e9226e74f8: Loading layer  51.46MB/51.46MB
192e9fad2abc: Loading layer  3.584kB/3.584kB
6d7504772167: Loading layer  4.608kB/4.608kB
88fca8ae768a: Loading layer  629.8kB/629.8kB
Loaded image: game2048:latest
[root@server2 ~]# docker run -d --name vm1 -p 80:80   game2048 #镜像
  ##--name 是自己给容器的命名 -p作端口预设    物理机端口:docker 端口  ##注意物理机端口必须是没被占用的,此时访问server宿主机的时候会直接到docker 容器
[root@server2 ~]# docker ps   ##查看运行的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
f7cc3f6aecf8        game2048            "/bin/sh -c 'sed -i …"   44 seconds ago      Up 43 seconds       0.0.0.0:80->80/tcp, 443/tcp   vm1
[root@server2 ~]# docker inspect vm1 #查看容器信息

在这里插入图片描述
访问172.25.3.2 ##server2的ip(做了端口的)
在这里插入图片描述

####docker常用的基础命令#####

docker load -i 镜像名  ##导入镜像
 docker run -i --name 容器名  镜像名  ##创建容器以镜像为模版
docker ps  查看容器状态
 docker ps -a  查看容器状态(包或不活跃的容器)
 docker attach vm1 连接容器
 docker top vm1 查看容器进程
 docker logs vm1 查看容器指令输出  -f参数可以实时查看
 docker inspect vm1  查看容器详情
 docker stats  vm1  查看容器资源使用率
 docker diff vm1 查看容器修改
 docker stop vm1 停止容器
 docker start vm1  启动容器
 docker kill vm1强制杀死容器进程
 docker restart vm1    重启容器
 docker rm   vm1  删除容器
 docker pause/uppause  vm1  暂停/恢复容器

基础命令操作:

[root@server2 ~]# docker load -i ubuntu.tar   ##导入镜像
56abdd66ba31: Loading layer  196.8MB/196.8MB
9468150a390c: Loading layer  208.9kB/208.9kB
11083b444c90: Loading layer  4.608kB/4.608kB
5f70bf18a086: Loading layer  1.024kB/1.024kB
Loaded image: ubuntu:latest
[root@server2 ~]# docker load -i rhel7.tar 
e1f5733f050b: Loading layer  147.1MB/147.1MB
[root@server2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        2 years ago         55.5MB
ubuntu              latest              07c86167cdc4        3 years ago         188MB
rhel7[root@server2 ~]# docker run -it --name vm2 ubuntu  #  ##创建容器vm2以镜像rhel7为模版
root@dbd299a77bfb:/# ls  #查看
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@dbd299a77bfb:/# uname -r  ##查看版本
3.10.0-514.el7.x86_64
root@dbd299a77bfb:/# exit
exit
[root@server2 ~]# docker run -it --name vm2 ubuntu
root@dbd299a77bfb:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
root@dbd299a77bfb:/# uname -r
3.10.0-514.el7.x86_64
root@dbd299a77bfb:/# exit
exit
[root@server2 ~]# docker history ubuntu:latest    #查看ubuntu镜像历史信息
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
07c86167cdc4        3 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0B                  
<missing>           3 years ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB               
<missing>           3 years ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   195kB               
<missing>           3 years ago         /bin/sh -c #(nop) ADD file:b9504126dc5590898…   188MB               
[root@server2 ~]# docker ps -a  查看容器状态
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                         NAMES
ddc369328a0f        rhel7               "bash"                   57 seconds ago      Exited (0) 17 seconds ago                                 vm4
4e03bbd9e419        rhel7               "bash"                   4 minutes ago       Exited (0) 2 minutes ago                                  vm3
dbd299a77bfb        ubuntu              "/bin/bash"              6 minutes ago       Exited (0) 5 minutes ago                                  vm2
f7cc3f6aecf8        game2048            "/bin/sh -c 'sed -i …"   42 minutes ago      Up 42 minutes               0.0.0.0:80->80/tcp, 443/tcp   vm1
[root@server2 ~]# docker rm -f vm1   ##删除vm1容器
vm1
[root@server2 ~]# docker rm -f vm2
vm2
[root@server2 ~]# docker run -it --name vm1 rhel7 bash
bash-4.2# touch file{1..10}
bash-4.2# ls
bin   etc     file2  file5  file8  lib	  mnt	root  srv  usr
boot  file1   file3  file6  file9  lib64  opt	run   sys  var
dev   file10  file4  file7  home   media  proc	sbin  tmp
[root@server2 ~]# docker rm -f vm1
vm1
[root@server2 ~]# docker run -it --name vm1 rhel7 bash
bash-4.2# ls
bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
boot  etc  lib	 media	opt  root  sbin  sys  usr
[root@server2 ~]# docker run -it --name vm1 rhel7 bash
bash-4.2# ls
bin   dev  home  lib64	mnt  proc  run	 srv  tmp  var
boot  etc  lib	 media	opt  root  sbin  sys  usr
bash-4.2# touch file{1..5}
bash-4.2# ls
bin   dev  file1  file3  file5	lib    media  opt   root  sbin	sys  usr
boot  etc  file2  file4  home	lib64  mnt    proc  run   srv	tmp  var
bash-4.2# exit
[root@server2 ~]# docker  commit vm1 rhel7:v
sha256:c55491c0a5b1bb1da1731aea18dcfd38415a5e67b7d99b041a9c7f93f2f2fc9b
[root@server2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
rhel7               v                   c55491c0a5b1        18 seconds ago      140MB
game2048            latest              19299002fdbe        2 years ago         55.5MB
ubuntu              latest              07c86167cdc4        3 years ago         188MB
rhel7               latest              0a3eb3fde7fd        5 years ago         140MB
[root@server2 ~]# docker rm -f vm1
vm1
[root@server2 ~]# docker run -it --name vm1 rhel7:v
bash-4.2# ls
bin   dev  file1  file3  file5	lib    media  opt   root  sbin	sys  usr
boot  etc  file2  file4  home	lib64  mnt    proc  run   srv	tmp  var
[root@server2 ~]# docker run -it --name vm1 rhel7:v
bash-4.2# ls
bin   dev  file1  file3  file5	lib    media  opt   root  sbin	sys  usr
boot  etc  file2  file4  home	lib64  mnt    proc  run   srv	tmp  var
[root@server2 ~]# docker history rhel7
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
0a3eb3fde7fd        5 years ago                             140MB               Imported from -
[root@server2 ~]# docker rm -f vm1
vm1
[root@server2 ~]# docker rmi -f rhel7:v
Untagged: rhel7:v
Deleted: sha256:c55491c0a5b1bb1da1731aea18dcfd38415a5e67b7d99b041a9c7f93f2f2fc9b
Deleted: sha256:31db62e8fe95ba48dbce72fd48e90d2bafc6769bd3a38f0c1a95833da1c5979d
[root@server2 ~]# docker history rhel7
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
0a3eb3fde7fd        5 years ago                             140MB               Imported from -
[root@server2 ~]# docker history rhel7
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
0a3eb3fde7fd        5 years ago                             140MB               Imported from -
[root@server2 ~]# docker history rhel7
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
0a3eb3fde7fd        5 years ago                             140MB               Imported from -

猜你喜欢

转载自blog.csdn.net/weixin_44821839/article/details/95312261