IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker-简介、镜像 -> 正文阅读

[系统运维]docker-简介、镜像

docker简介

1。

Docker是一个开源的应用容器引擎,是一个轻量级容器技术。基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用和依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

Docker的理念:Build,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。

2。对比

在这里插入图片描述

一、 docker的安装

在网上找资源,
或者去老吴那里去把pub/docs/docker/20 目录端下来,
放在apache的发布目录下,
然后在你的虚拟机上/etc/yum.repos.d/下 编写docker.repo,
以上均是在老李那里学的 很基础,说实话我忘的差不多了!

构建软件仓库的好处,能自动处理软件的依赖性。

[root@server8 ~]#yum list all
[root@server8 ~]# yum install -y docker-ce		
[root@server8 ~]# systemctl enable --now docker		#开启服务
[root@server8 ~]# docker info						#有两个警告
[root@server8 yum.repos.d]# sysctl -a | grep bridge-nf-call-iptables
net.bridge.bridge-nf-call-iptables = 0				#有用
[root@server8 yum.repos.d]# vim /etc/sysctl.d/docker.conf
[root@server8 yum.repos.d]# cat /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server8 yum.repos.d]# sysctl --system			#重新加载内核
[root@server8 yum.repos.d]# docker info				#警告消失

在这里插入图片描述
在这里插入图片描述

二、docker的使用

1。简单在网页上传一个游戏,游戏来源:老吴的阿里云

[root@server8 yum.repos.d]# docker search yakexi007
[root@server8 yum.repos.d]# docker pull yakexi007/game2048
[root@server8 yum.repos.d]# docker run -d --name demo -p 8080:8080 yakexi007/mario 	
   #8080:8080 	分号前面是真实端口没冲突就可以,后面是docker的虚拟端口指定的不能更改的

现在可以在浏览器上 访问ip+端口

在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、docker的镜像分层,讲解及其演示

1、docker的命令大概这么多,我们学了一部分
在这里插入图片描述

[root@server8 yum.repos.d]# docker stop demo 			#停掉刚刚的游戏
[root@server8 yum.repos.d]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@server8 yum.repos.d]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS                       PORTS     NAMES
c068e6bf0ae3   yakexi007/mario   "python3 -m http.ser…"   9 minutes ago   Exited (137) 3 minutes ago             demo

[root@server8 yum.repos.d]# docker history  yakexi007/mario:latest 			##容器的镜像分层
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
9a35a9e43e8c   6 years ago   /bin/sh -c #(nop) CMD ["python3" "-m" "http.…   0B        
<missing>      6 years ago   /bin/sh -c #(nop) EXPOSE 8080/tcp               0B        
<missing>      6 years ago   /bin/sh -c #(nop) WORKDIR /app                  0B        
<missing>      6 years ago   /bin/sh -c #(nop) COPY dir:02930d36f63824e72…   9.81MB    
<missing>      6 years ago   /bin/sh -c apt-get install -y python3           0B        
<missing>      6 years ago   /bin/sh -c #(nop) MAINTAINER Pavel 'PK' Kami…   0B        
<missing>      6 years ago   /bin/sh -c #(nop) CMD ["/bin/bash"]             0B        
<missing>      6 years ago   /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB     
<missing>      6 years ago   /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   195kB     
<missing>      6 years ago   /bin/sh -c #(nop) ADD file:5a3f9e9ab88e725d6…   188MB     

2、演示操作

[root@server8 ~]# lftp 172.25.254.250
lftp 172.25.254.250:/> cd pub/images/
lftp 172.25.254.250:/pub/images> get ubuntu.tar 		#下载个包作为演示

[root@server8 ~]# docker load -i ubuntu.tar 			#上传本的资源给容器
a70daca533d0: Loading layer [==================================================>]  75.16MB/75.16MB
Loaded image: ubuntu:latest

[root@server8 ~]# docker images		#查看已经上传的容器资源
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
ubuntu               latest    c29284518f49   2 months ago   72.8MB
yakexi007/game2048   latest    19299002fdbe   4 years ago    55.5MB
yakexi007/mario      latest    9a35a9e43e8c   6 years ago    198MB

[root@server8 ~]# docker history ubuntu:latest 			#查看ubuntu的历史,可以看到分了两层
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
c29284518f49   2 months ago   /bin/sh -c #(nop)  CMD ["bash"]                 0B        
<missing>      2 months ago   /bin/sh -c #(nop) ADD file:5c3d9d2597e01d1ce…   72.8MB    

[root@server8 ~]# docker run -it  --rm  ubuntu		#运行它  -it交互模式
root@df1ddc6b402f:/# uname -r
3.10.0-957.el7.x86_64
[root@server8 ~]# uname  -r
3.10.0-957.el7.x86_64								#可以得出他们用的是同一个内核

[root@server8 ~]# docker pull busybox				#没注意到解释  ,也是一个演示
Using default tag: latest
latest: Pulling from library/busybox
24fb2886d6f6: Pull complete 
Digest: sha256:f7ca5a32c10d51aeda3b4d01c61c6061f497893d7f6628b92f822f7117182a57
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

[root@server8 ~]# docker run -it  --name haha busybox		#--name 命名(随意 
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # touch file1
/ # touch file2
/ # ls
bin    dev    etc    file1  file2  home   proc   root   sys    tmp    usr    var

[root@server8 ~]# docker rm haha 		#删除它
haha

[root@server8 ~]# docker run -it  --name haha busybox		#再来,建立的文件没有写入   想象一下那个分层			基层是只读不写入的
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # touch file1
/ # touch file2
/ # touch file3
[root@server8 ~]# docker commit haha hh1
sha256:1071c9ea6e1057ea55bcf221bc4e51e256cec13003124b71bf242734823d76d2

[root@server8 ~]# docker images			#在以前的基础上进行提交的   hh1就是
REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
hh1                  latest    1071c9ea6e10   2 minutes ago   1.24MB
busybox              latest    16ea53ea7c65   2 weeks ago     1.24MB
ubuntu               latest    c29284518f49   2 months ago    72.8MB
yakexi007/game2048   latest    19299002fdbe   4 years ago     55.5MB
yakexi007/mario      latest    9a35a9e43e8c   6 years ago     198MB

		#两者的比较		haha只是启动的名字,而不是真是的文件   hh1则是改动后的真实文件名称(他的前身是busybox)		
		#多了个1071c9ea6e10   几时创建的,通过什么方式,大小
[root@server8 ~]# docker history hh1:latest 			
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
1071c9ea6e10   4 minutes ago   sh                                              39B       
16ea53ea7c65   2 weeks ago     /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      2 weeks ago     /bin/sh -c #(nop) ADD file:c9e0c3d3badfd458c…   1.24MB    
[root@server8 ~]# docker history busybox:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
16ea53ea7c65   2 weeks ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:c9e0c3d3badfd458c…   1.24MB 

[root@server8 ~]# docker rmi hh1:latest 
Untagged: hh1:latest
Deleted: sha256:1071c9ea6e1057ea55bcf221bc4e51e256cec13003124b71bf242734823d76d2
Deleted: sha256:049669e8ff1a31a236fd7f5efcde4f3fd66a41f648be794ac60142c2c22d1db3
[root@server8 ~]# docker history busybox:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
16ea53ea7c65   2 weeks ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:c9e0c3d3badfd458c…   1.24MB    

3.Dockerfile 详解

[root@server8 ~]# mkdir yang
[root@server8 ~]# cd yang/
[root@server8 yang]# vim Dockerfile
[root@server8 yang]# cat Dockerfile 
FROM busybox				#在谁的基础上
RUN touch file1				#运行	touch file1				
RUN echo "hello world"		#运行    echo "hello world"   使用后history能看见
[root@server8 yang]# docker build -t yang:1 .
		#对比   图片
[root@server8 yang]# docker history busybox:latest 
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
16ea53ea7c65   2 weeks ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      2 weeks ago   /bin/sh -c #(nop) ADD file:c9e0c3d3badfd458c…   1.24MB    

[root@server8 yang]# docker run -it --rm yang:1		#使用
/ # ls
bin    dev    etc    file1  home   proc   root   sys    tmp    usr    var	#有file1

在这里插入图片描述

Dockerfile常用命令

FROM-------->指定base镜像,如果本地不存在会从远程仓库下载。

MAINTAINER-------->设置镜像的作者,比如用户邮箱等。

COPY-------->把文件从build context复制到镜像、支持两种形式:COPY src dest 和 COPY [“src”, “dest”]
src必须指定build context中的文件或目录。

ADD-------->用法与COPY类似,不同的是src可以是归档压缩文件,文件会被自动解压到dest,也可以自动下载URL并拷贝到镜像。

ENV-------->设置环境变量,变量可以被后续的指令使用。

EXPOSE-------->如果容器中运行应用服务,可以把服务端口暴露出。

VOLUME--------->申明数据卷,通常指定的是应用的数据挂在点。

WORKDIR--------->为RUN、CMD、ENTRYPOINT、ADD和COPY指令设置镜像中的当前工作目录,如果目录不存在会自动创建。

RUN------>在容器中运行命令并创建新的镜像层,常用于安装软件包。

CMD 与 ENTRYPOINT------>这两个指令都是用于设置容器启动后执行的命令,但CMD会被docker run后面的命令行覆盖,而ENTRYPOINT不会被忽略,一定会被执行。#CMD可以被更改,另一个不行。

实操

[root@server8 yang]# ls
Dockerfile  dvd.repo  nginx-1.21.1.tar.gz		#没有想办法搞
[root@server8 yang]# vim Dockerfile
[root@server8 yang]# cat Dockerfile
FROM busybox
RUN touch file1
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.21.1.tar.gz /mnt
ENV hostname server-ni-cai
EXPOSE 80
VOLUME ["/data"]
WORKDIR "/mnt/nginx-1.21.1"
CMD echo "hello, $hostname"
[root@server8 yang]# docker build -t yang:2 .
[root@server8 yang]# docker run  -it --rm yang:2		#运行使用
hello, server-ni-cai

[root@server8 yang]# vim Dockerfile			#改最后一行看下带[]的区别
CMD echo "hello, $hostname"  ----》 CMD ["/bin/sh","-c","echo hello,$hostname"]		#[]里指的是该镜像的运行环境它的shell在/bin/sh 
[root@server8 yang]# docker build -t yang:3 .	
[root@server8 yang]# docker run  -it --rm yang:3
hello,server-ni-cai

[root@server8 yang]# vim Dockerfile		
WORKDIR "/mnt/nginx-1.21.1"			#从这行后面开始
ENTRYPOINT  ["/bin/echo","hello"]
CMD ["world"]
[root@server8 yang]# docker build -t yang:4 .	
[root@server8 yang]#  docker run  -it --rm yang:4
hello world
[root@server8 yang]#  docker run  -it --rm yang:4 haha
hello haha

在这里插入图片描述

四、镜像优化

1。 没有优化前

接上以实验,docker rmi 之前的容器		#不演示了
[root@server8 yang]# docker rmi yang:4		#等等
[root@server8 yang]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
busybox              latest    16ea53ea7c65   2 weeks ago    1.24MB
ubuntu               latest    c29284518f49   2 months ago   72.8MB
yakexi007/game2048   latest    19299002fdbe   4 years ago    55.5MB
yakexi007/mario      latest    9a35a9e43e8c   6 years ago    198MB
[root@server8 yang]# ls
Dockerfile  dvd.repo  nginx-1.21.1.tar.gz  rhel7.tar	# rhel7.tar	这个包要有
[root@server8 yang]# docker load -i rhel7.tar
[root@server8 yang]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
rhel7                latest    0a3eb3fde7fd   7 years ago    140MB		#多了个它
 
[root@server8 yang]# cat Dockerfile 
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
ADD nginx-1.21.1.tar.gz /mnt
WORKDIR "/mnt/nginx-1.21.1"
RUN rpmdb --rebuilddb
RUN yum install -y gcc pcre-devel zlib-devel
RUN ./configure --prefix=/usr/local/nginx
RUN yum install -y make
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@server8 yang]# docker build -t web:y1 .
[root@server8 yang]# docker images web:y1
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
web          y1        4edeb5e325d7   56 seconds ago   346MB

[root@server8 yang]# docker pull nginx
[root@server8 yang]# docker images nginx		#官方的,上面的肯定不行,在生产环境中
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    f8f4ffc8092c   3 days ago   133MB

2。优化之后

[root@server8 yang]# lftp 172.25.254.111
lftp 172.25.254.111:~> cd pub/images/
lftp 172.25.254.111:/pub/images> get base-debian10.tar 
[root@server8 yang]# docker load -i base-debian10.tar 
de1602ca36c9: Loading layer [==================================================>]  3.041MB/3.041MB
1d3b68b6972f: Loading layer [==================================================>]  17.77MB/17.77MB
Loaded image: gcr.io/distroless/base-debian10:latest		#这个  有用 

[root@server8 yang]# mkdir niu-bi
[root@server8 yang]# cd niu-bi/
[root@server8 niu-bi]# vim Dockerfile

[root@server8 niu-bi]# cat Dockerfile 
FROM nginx as base
ARG Asia/Shanghai

RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /usr/sbin/nginx-debug /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/ld-* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime

FROM gcr.io/distroless/base-debian10

COPY --from=base /opt /

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]
[root@server8 niu-bi]# docker build -t web:y2 .
[root@server8 niu-bi]# docker images web:y2
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
web          y2        ea168192de26   53 seconds ago   32MB			#大小上来说完胜
[root@server8 niu-bi]# docker rm demo		#先回收
[root@server8 niu-bi]# docker run -d --name demo web:y2	
a5c35403de51a36adcee7a74025bc2d4dc7a86ad415de6f55c1bae9933576210
[root@server8 niu-bi]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS             NAMES
a5c35403de51   web:y2    "nginx -g 'daemon of…"   2 minutes ago   Up 2 minutes   80/tcp, 443/tcp   demo
[root@server8 niu-bi]# docker inspect web:y2		#找到该镜像的ip   我是没看见!还的研究研究
[root@server8 niu-bi]# curl 172.17.0.2		#也可以看见发布目录		纯属蒙的

镜像常用子命令

docker + 。。。+镜像名字或id

images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建镜像
build 从Dockerfile构建镜像
tag 给镜像打标签
search 搜索镜像
pull 从仓库拉取镜像
push 上传镜像到仓库
rmi 删除镜像

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 15:13:35  更:2021-10-02 15:14:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:42:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码