2021年网络搭建Docker虚拟化

  • 1.什么是Docker?

我们简单的了解一些docker-ce:
    Docker是一种CS架构的软件产品,可以把代码及依赖包打包成为镜像,作为交付交质,并且把镜像启动成为容器,提供容器生命周期的管理,来提供轻量级虚拟化功能,容器就是在宿主机中的一个个虚拟空间,彼此相互隔离,完全独立。
  • 2.工作原理

2021年网络搭建Docker虚拟化_第1张图片
一、三大核心要素:镜像(image)、容器(Container)、仓库(Registry)
  1.镜像(image)
     打包了业务代码以及运行环境的包、是静态的文件、不能直接对外提供服务等功能。
  2.容器(Container)
     镜像的运行时,可以对外提供服务。本质上是利用Namespace和Cgroup等技术在宿主机中创建       独立的虚拟空间。
  3.仓库(Registry)
     公有仓库:Docker HUb 、阿里、网页等
     私有仓库:内地搭建的仓库,比如企业内部搭建等
        Docker Registry,Docker官方提供的镜像仓库存储服务
        Harbor, 是Docker Registry的更高级封装,它除了提供了Web GUI界面,角色和用户权限
     管理,用户操作审计等功能。
  4.镜像访问地址形式:Registry.devops.com/demo/hello:latest,特殊情况若没有前面的url地址,则默    认寻找Docker Hub中的镜像,若没有tag标签,则使用latest做为默认标签。
2021年网络搭建Docker虚拟化_第2张图片
  • 3.Docker基本命令

[root@localhost ~]# docker images         #查看所有镜像
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       8         5d0da3dc9764   18 months ago   231MB
[root@localhost ~]# 
[root@localhost ~]# docker pull nginx:alpine        #拉取镜像pepository为nginx、tag为alpine。
alpine: Pulling from library/nginx
63b65145d645: Pull complete 
8c7e1fd96380: Pull complete 
86c5246c96db: Pull complete 
b874033c43fb: Pull complete 
dbe1551bd73f: Pull complete 
0d4f6b3f3de6: Pull complete 
2a41f256c40f: Pull complete 
Digest: sha256:6318314189b40e73145a48060bff4783a116c34cc7241532d0d94198fb2c9629
Status: Downloaded newer image for nginx:alpine
docker.io/library/nginx:alpine
[root@localhost ~]# 
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        alpine    2bc7edbc3cf2   4 weeks ago     40.7MB
centos       8         5d0da3dc9764   18 months ago   231MB
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker save -o nginx1.tar nginx:alpine     #拉取镜像到本地,使用repository:tag
[root@localhost ~]# docker save -o nginx2.tar 2bc7edbc3cf2     #拉取镜像到本地,使用image_id
[root@localhost ~]# ll
total 316144
-rw-------. 1 root root      1023 Nov 29 12:10 anaconda-ks.cfg
-rw-r--r--. 1 root root 238581248 Mar 14 02:46 centos8.tar
-rw-------. 1 root root  42570240 Mar 14 08:38 nginx1.tar
-rw-------. 1 root root  42569216 Mar 14 08:38 nginx2.tar
[root@localhost ~]# 
[root@localhost ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       8         5d0da3dc9764   18 months ago   231MB
[root@localhost ~]# 
[root@localhost ~]# docker load  -i nginx1.tar      #从本地文件导入镜像
7cd52847ad77: Loading layer [==================================================>]  7.338MB/7.338MB
d8a5a02a8c2d: Loading layer [==================================================>]   5.32MB/5.32MB
5e59460a18a3: Loading layer [==================================================>]  3.584kB/3.584kB
152a948bab3b: Loading layer [==================================================>]  4.608kB/4.608kB
c4d67a5827ca: Loading layer [==================================================>]  3.584kB/3.584kB
f1bee861c2ba: Loading layer [==================================================>]  7.168kB/7.168kB
042cd3f87f43: Loading layer [==================================================>]  29.85MB/29.85MB
Loaded image: nginx:alpine
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        alpine    2bc7edbc3cf2   4 weeks ago     40.7MB
centos       8         5d0da3dc9764   18 months ago   231MB
[root@localhost ~]# 
[root@localhost ~]# docker save {repository:tag/image_id} > 压缩文件.tar    #当然也可以使用重定向来指定导出文件
[root@localhost ~]# docker load < {repository:tag/image_id}    #也可以使用反重定向来导入镜像
[root@localhost ~]# docker rmi  {repository:tag/image_id}    #删除镜像
[root@localhost ~]# docker ps                 #查看容器状态列表,docker ps -a表示列出所有容器状态
[root@localhost ~]# docker run --name 容器名称 -d  {repository:tag/image_id} 解释器,如/bin/{bash,sh}
[root@localhost ~]# docker run --name 容器名称  -ti  {repository:tag/image_id} /bin/bash #启动容器的同时进入容器,-ti与/bin/sh或者/bin/bash配套使用,意思未分配一个tty终端
[root@localhost ~]# docker run --name 容器名称 -d -p 80:80  {repository:tag/image_id}    #端口映射,将容器端口映射到宿主机端口中
[root@localhost ~]# docker run --cpuset-cpus="0-3" --cpu-shares=512 --memory=600m {repository:tag/image_id}
 --cpuset-cpus        #用于设置容器可以使用的VCPU核,简写为-C
 --cpu-shares         #用于设置多个容器竞争CPU时,各个容器相对分配到的CPU时间比例

[root@localhost ~]# 
2021年网络搭建Docker虚拟化_第3张图片
[root@localhost ~]# docker exec -ti  /bin/bash     #进入容器或者执行容器内的命令
[root@localhost ~]# docker logs 容器名称        #查看日志
[root@localhost ~]# docker logs -f 容器名称      #查看最新日志
[root@localhost ~]# docker logs --tail=100 -f 容器名称 #查看最新认证100条日志
[root@localhost ~]# docker {stop/start/rm/rm -f}   容器名称     #停止运行中容器、启动容器、删除未启动的容器、删除启动中的容器
[root@localhost ~]# docker inspect 容器名称        #详细查看容器信息
[root@localhost ~]# docker inspect  {repository:tag/image_id}    #详细查看镜像的信息

  • 4.Docker实验步骤

一、题目要求:
1.在Linux-2上安装docker-ce,导入centos镜像。软件包和镜像存放在物理机D:\soft\DockerLinux。 
2.创建名称为skills的容器,映射Linux-2的80端口到容器的80端口,在容器内安装apache2,默认网页内容为“HelloContainer”。
[root@localhost ~]# dnf -y  install -y yum-utils device-mapper-persistent-data lvm2
[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@localhost ~]# dnf -y install docker-ce 
[root@localhost ~]# systemctl enable  --now docker 
[root@localhost ~]# yumdownloader --resolve --destdir /docker docker-*    #下载docker包到本地目录/docker ,然后自己用rpm安装即可
[root@localhost ~]# 
第一种方法:
[root@localhost ~]# dnf -y install docker-ce 
[root@localhost ~]# docker load -i /root/centos.tar
[root@localhost ~]# docker run -d --name skills -p 80:80 centos /bin/bash -c "yum update -y && yum install -y httpd && echo 'HelloContainer' > /var/www/html/index.html && /usr/sbin/httpd -DFOREGROUND"

参数解析:
docker run        #创建并运行一个新的容器
    -d            #后台运行容器
--name skills    #指定容器名称为skills
-p 80:80        #将Linux-2的80端口映射到容器的80端口
centos:            #基于CentOS镜像创建容器
/bin/bash -c "yum update -y && yum install -y httpd && echo 'HelloContainer' > /var/www/html/index.html && /usr/sbin/httpd -DFOREGROUND"    #容器启动后需要执行的命令
yum update -y    #更新容器内的软件包
yum install -y httpd        #安装Apache2 Web服务器
echo 'HelloContainer' > /var/www/html/index.html    #在容器内的Apache2 Web服务器上创建默认网页,内容为"HelloContainer"
/usr/sbin/httpd -DFOREGROUND        #开机启动Apache2 Web服务器
[root@localhost ~]#  curl https://linux2.skills.com 
HelloContainer
[root@localhost ~]# 
第二种方法:
[root@localhost ~]# dnf -y install docker-ce 
[root@localhost ~]# mkdir /etc/docker/httpd
[root@localhost ~]# vim /etc/docker/httpd/dockerfile
...
FROM centos:latest            #镜像为centos:latest
RUN yum -y install httpd mod_ssl        #在容器中安装apache和ssl模块
EXPOSE 80                                #开启80短裤
ADD index.html /var/www/html/index.html    #修改默认网页
ADD 1.sh ./1.sh                            #运行shell脚本
RUN chmod +755 1.sh                        #此1.sh更大的权限
CMD ["./1.sh"]                            #运行此脚本
...
[root@localhost ~]# vim /etc/docker/httpd/1.sh 
...
#!/bin/bash                                #解释器
rm -rf /run/httpd/*                        #清空httpd缓存
exec /usr/sbin/apachectl -D FOREGROUND    #运行httpd服务
echo 'HelloContainer' > /var/www/html/index.html    
systemctl enable --now httpd 
...
[root@localhost ~]# docker load  < centos8.tar
[root@localhost ~]# docker build /etc/docker/httpd -t my-httpd:apache -f /etc/docker/dockerfile    #生成本地容器
[root@localhost ~]# docker run -d -p 80:80 --name=my-httpd my-httpd:apache    #启动容器,并进项端口映射为80端口
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker ps                        #查看docke进程
CONTAINER ID   IMAGE             COMMAND    CREATED              STATUS              PORTS                               NAMES
903c44058853   my-httpd:apache   "./1.sh"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp   my-httpd            #容器启动成功
[root@docker apache]#
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]#  curl https://linux2.skills.com 
HelloContainer
[root@localhost ~]# 
第三种方法:
[root@localhost ~]# dnf -y install docker-ce
[root@localhost ~]# systemctl restart docker 
[root@localhost ~]# ls
anaconda-ks.cfg  centos8.tar
[root@localhost ~]# 
[root@localhost ~]# docker load < centos8.tar 
74ddd0ec08fa: Loading layer [==================================================>]  238.6MB/238.6MB
Loaded image: centos:8
[root@localhost ~]# 
[root@localhost ~]# docker image ls 
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       8         5d0da3dc9764   18 months ago   231MB
[root@localhost ~]# 
[root@localhost ~]# docker run -d -itp 80:80 --privileged=true --name skills 5d0da3dc9764 /usr/sbin/init 
e5e46f94f23dc5150a5fc6b146d7a9b45d397b84eb70098d9c97488184b24803
[root@localhost ~]# docker ps -a 
CONTAINER ID   IMAGE          COMMAND            CREATED          STATUS          PORTS                               NAMES
e5e46f94f23d   5d0da3dc9764   "/usr/sbin/init"   17 seconds ago   Up 16 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   skills
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker exec -it skills bash 
[root@e5e46f94f23d /]# 
[root@e5e46f94f23d /]# lsblk 
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  20G  0 disk 
|-sda1   8:1        1G  0 part 
|-sda2   8:2    0  19G  0 part 
sr0     11:0    1  10G  0 rom  
[root@e5e46f94f23d /]# mkdir /iso 
[root@e5e46f94f23d /]# mount /dev/sr0  /iso/ 
mount: /iso: WARNING: device write-protected, mounted read-only.
[root@e5e46f94f23d /]# rm /etc/yum.repos.d/CentOS-Linux-* -rf
[root@e5e46f94f23d yum.repos.d]# vim centos.repo 
...
[media-baseos]
name=CentOS Linux $releasever - Media - BaseOS
baseurl=file:///iso/BaseOS
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[media-appstream]
name=CentOS Linux $releasever - Media - AppStream
baseurl=file:///iso/AppStream
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
...


[root@e5e46f94f23d yum.repos.d]#  dnf makecache 
[root@e5e46f94f23d yum.repos.d]# 
[root@e5e46f94f23d yum.repos.d]# dnf -y install vim  httpd 
[root@e5e46f94f23d yum.repos.d]# echo "HelloContainer" > /var/www/html/index.html 
[root@e5e46f94f23d yum.repos.d]# systemctl restart httpd 
[root@e5e46f94f23d yum.repos.d]# 
[root@e5e46f94f23d yum.repos.d]# exit 
[root@localhost ~]# curl http://linux-2.skills.com 
HelloContainer
[root@localhost ~]# 

你可能感兴趣的:(linux,centos,docker,运维)