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镜像和容器

1.前言

? 初见DOCKER,感觉和我们常用的虚拟机(VMware,viurebox)类似,是一个独立于宿主机的模块,可以解决程序在各个系统间的移植,但它真的仅仅是这样嘛?
操作系统:

	Deepin 20.4

内核版本:

	Linux msos 5.10.83-amd64-desktop #20.00.50.06-release SMP Fri Dec 31 09:32:12 CST 2021 x86_64 GNU/Linux

DOCKER版本:

    Client: Docker Engine - Community
     Version:           20.10.12
     API version:       1.41
     Go version:        go1.16.12
     Git commit:        e91ed57
     Built:             Mon Dec 13 11:45:37 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true

    Server: Docker Engine - Community
     Engine:
      Version:          20.10.12
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.16.12
      Git commit:       459d0df
      Built:            Mon Dec 13 11:43:46 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.12
      GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
     runc:
      Version:          1.0.2
      GitCommit:        v1.0.2-0-g52b36a2
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0

2.容器的优缺点

1.1.容器优点

  • 敏捷性:相对于虚拟机没有“虚拟操作系统”、“Hypervtaor层”,占用资源更低,启动时间也更快。同时可以控制容器资源的分配;
  • 隔离性:与实体宿主环境无关,不会和其他服务产生库冲突,通过其高隔离的特性可以快速进行移植和部署;
  • 安全性:容器之间相互隔离,互相之间互不影响,即使一台容器受到攻击,也不会影响其他容器的运行;
  • 部署方便:搭建好开发环境后,可保存为镜像。需要使用时,直接使用镜像即可;
  • 部署安全:保证了开发和生产环境的一致,避免出现“我的环境是好的”的问题;

2.2.容器缺点

  • 网络数据和持久化磁盘数据由于是通过连接或映射实现的,因此对效率有一定的影响;

3.DOCKER部署安装

3.1.UBUNTU上安装DOCKER

sudo wget -qO- https://get.docker.com/ | sh

3.2.查看docker版本

docker version

3.3.开启和禁止开机服务自启动

sudo systemctl  enable   docker
sudo systemctl  disable  docker

3.4.启动和禁止服务

sudo systemctl start docker
sudo systemctl stop  docker

4.DOCKER使用

4.1.镜像

4.1.1.镜像名称

格式:
	[Namespace]/[Repository]:[Tag]
说明:
	Namespace	镜像的命名空间,用于区别构建镜像的组织或个人
	Repository	镜像的档案名称,通常采用服务名称
	Tag			用来区别镜像服务版本
例子:
	“msavskit/test:01.01.01.01”和“msavskit:01.01.01.38”

4.1.1.镜像搜索

从DockerHub中搜索基本的镜像,用来创建容器。格式:docker search [OPTIONS] TERM

格式:
	docker search [OPTIONS] TERM
OPTIONS说明:
	-f filter   Filter output based on conditions provided
      --format string   根据条件进行过滤输出
      --limit int       搜索结果的最大数量(默认为25个,最大100)
      --no-trunc        不要截断输出
例子:
	sudo docker search ubuntu

搜索结果

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu/nginx                     Nginx, a high-performance reverse proxy & we…   33                   
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   24                   
ubuntu/apache2                   Apache, a secure & extensible open-source HT…   23                   
ubuntu/prometheus                Prometheus is a systems and service monitori…   23                   
kasmweb/ubuntu-bionic-desktop    Ubuntu productivity desktop for Kasm Workspa…   17           
说明:
	NAME		名称
	DESCRJPTION 创建者提供的对镜像的简单描述。
	STARS		镜像在宫方镜像仓库中收到用户给出的星星的数量,表示镜像受欢迎的程度
	OFFICIAL	镜像是否由 Docker 官方提供
	AUTOMATED	镜像是否使用了自动构建

4.1.2. 镜像拉取

格式:
	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
  -a, --all-tags                下载档案中所有TAG的镜像
      --disable-content-trust   跳过镜像验证(默认为true)
      --platform string         若服务支持多平台,则设置目标平台
  -q, --quiet                   关闭冗余输出
例子:
	sudo docker pull ubuntu:20.04

4.1.3.镜像查看

格式:
	 docker image ls [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
  -a, --all             显示所有镜像(默认为隐藏中间镜像)
      --digests         显示数字
  -f, --filter filter   根据条件过滤输出
      --format string   使用使用一个Go模板来更好的列出镜像
      --no-trunc        不要截断输出
  -q, --quiet           只显示镜像ID
例子:
	sudo docker image ls

4.1.4.镜像删除

格式:
	docker image rm [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
	-f, --force    强制移除镜像
      --no-prune   不要删除未带标记的父项

例子:
	sudo docker image rm [镜像ID或名称]

4.1.5.镜像创建

? Dockerfile是一个可自动创建Docker镜像的配置文件。那么我们首先需要创建一个Dockerfile文件,内容参考如下:

#格式:FROM image,FROM image:tag,FROM image@digest
#说明:FROM必须是第一个非注释指令。一个Dockerfile中可能有多个FROM,用来创建复合镜像,但需要在每个新的FROM命令之前,记录提交输出的最后一个镜像ID。
#例子:基于ubuntu:20.04构建镜像
FROM ubuntu:20.04

#设置镜像的作者信息,可用于提供镜像的帮助,内容可以包括作者名称,邮件或帮助链接
MAINTAINER	msavskit<msavskit@163.com>

#格式:LABEL <key>=<value> [<key>=<value> ...]或LABEL <key>[ <value>]
#说明:可以使用docker inspect命令来查看镜像的标签信息
#功能:为镜像提供元数据
#LABEL com.example.vendor="ACME Incorporated"

#格式:ARG [=]
#说明:构建镜像时,可在使用“--build-arg <varname>=<value>”传入参数,也可以定义时,赋予初始值。
#注意:不建议使用构建镜像时,命令传递密码数据,因为其他用户可以通过“docker history”查看到。Docker存在一些预定义ARG,如:HTTP_PROXY http_proxy HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy NO_PROXY no_proxy
#ARG DIR_HOME

#格式:ENV <key> <value>
#说明:作用于构建的镜像和后续的容器(ENV定义的变量会覆盖ARG定义的变量),也可以在运行容器时使用“--env <key>=<value>”进行覆盖
ENV DIR_HOME="/msavskit/"

#格式:WORKDIR /path/to/workdir
#说明:可以多次使用,如果使用相对路径,则相对上次的路径
#功能:设置工作目录
WORKDIR ${DIR_HOME}

#格式:COPY <src> <dest>或COPY ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),不会在目的文件目录解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
#COPY msavskit/start.sh          	    ${DIR_HOME}


#格式:ADD <src> <dest>或ADD ["<src>",... "<dest>"]
#说明:如果源文件是压缩文件(tar,gzip,bzip2等),将在目的文件目录进行解压。新目录的权限为0755,UID和GID均为0
#构建镜像时,增加文件到容器的目录
ADD msavskit/start.sh          	    ${DIR_HOME}
ADD msavskit/mscore_release.pkg  	${DIR_HOME}

#格式:RUN <command> 或 RUN ["executable", "param1", "param2"]
#说明:构建镜像时,执行的指令
RUN bash ${DIR_HOME}/mscore_release.pkg

#格式:EXPOSE <port> [<port>...]
#功能:通知DOCKER,容器运行时监听的端口
EXPOSE 8090

#格式:VOLUME ["/data"]
#功能:创建和挂载数据卷,数据存储在主机的/var/lib/docker/volumes/msavskit_etc/_data目录
#VOLUME  /etc/mscore/

#格式:USER [user | user:group | uid | uid:gid | user:gid | uid:group ]
#说明:默认用户为root。Dockerfile中可以多次设置,且只影响后续指令
#功能:设置用于运行后续命令的用户名或UID
#USER root

#格式:ENTRYPOINT param1 param2 或 ENTRYPOINT ["executable", "param1", "param2"]
#说明:ENTRYPOINT中的参数无法被覆盖重写,但CMD的可以。可以在运行容器时,使用-d进行参数传递,当然也可以通过CMD指令进行传递
#功能:指明程序入口点
#ENTRYPOINT  ["/usr/local/nginx/sbin/nginx"]

#格式:CMD <command> 、CMD ["executable", "param1", "param2"]和CMD ["param1", "param2"]
#说明:CMD ["param1", "param2"]是为ENTRYPOINT提供默认参数。在Dockerfile文件中只有最后一个CMD生效;
#功能:为正在运行的容器提供默认值
CMD ${DIR_HOME}/start.sh

#格式:STOPSIGNAL <signal>
#功能:停止容器时,Docker传递的停止信号,默认值SIGTERM。可以在docker-create和docker-run时,使用--stop-signal选项来重置该值
#STOPSIGNAL SIGKILL

#格式:ONBUILD [INSTRUCTION]
#功能:当镜像作为构建其他进行的基础镜像时触发

创建start.sh文件,用于启动主进程:

#! /bin/bash
CURPATH=`pwd`
cd ${PATH_SERVER_BIN} && chmod +x ${FILE_SERVER_START}&& ./${FILE_SERVER_START} &
#启动NGINX
/usr/local/mssrs/etc/init.d/srs start
#启动NGINX
/usr/local/nginx/sbin/nginx &
#启动MSAVSKIT
/usr/local/mscore/bin/mscore 
#进入命令行
/bin/bash

构建镜像指令:

格式:
	docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
	  --add-host list           添加主机到IP映射
      --build-arg list          设置镜像构建时的ARG变量
      --cache-from strings      指定作为缓冲源的镜像
      --cgroup-parent string    指定容器的(可选)父组
      --compress                使用gzip压缩构建内容
      --cpu-period int          限制镜像CPU CFS周期
      --cpu-quota int           限制镜像CPU CFS配额
  -c, --cpu-shares int          CPU共享(相对权重)
      --cpuset-cpus string      允许执行的CPU(0-3, 0,1)
      --cpuset-mems string      允许执行的mem(0-3, 0,1)
      --disable-content-trust   忽略镜像验证(默认为true)
  -f, --file string             Dockerfile文件名称 (默认'PATH/Dockerfile')
      --force-rm                移除中间容器
      --iidfile string          写入镜像ID的文件
      --isolation string        容器隔离技术
      --label list              设置镜像的标签变量
  -m, --memory bytes            内存限制
      --memory-swap bytes       交换内存限制=内存+交换: '-1'表示关闭交换限制
      --network string          设定在镜像构建时,RUN指令的网络模式 (默认 "default")
      --no-cache                在构建映像时,请不要使用高速缓存
      --pull                    尝试拉取一个最新版本的镜像
  -q, --quiet                   抑制镜像构建过程的信息输出,并在构建成功时显示镜像ID
      --rm                      构建成功后,删除中间容器 (默认true)
      --security-opt strings    安全选项
      --shm-size bytes          共享内存/dev/shm分区大小
  -t, --tag list                指定名称和标记格式,如'name:tag'
      --target string           设置构建阶段的目标
      --ulimit ulimit           限制选项 (默认 [])
例子:
	sudo docker build -f Dockerfile -t msavskit:01.01.01.38 .

4.1.6.镜像迁移

? 镜像导出(可以导出多个镜像)

sudo docker save -o msavskit.tar ubuntu:20.04 msavskit:01.01.01.38

? 镜像导入

sudo docker load -i msavskit.tar 

4.1.7.Docker Hub登录

sudo docker login -u <username> -p <password> <server> 
	server	默认采用 Docker Daemon 中的默认值。

4.1.8.docker image指令

格式:
	docker image COMMAND

Commands选项:
  build       基于Dockerfile文件构建镜像
  history     显示镜像的构建历史信息
  import      从TAR包(tarball)中导入内容来创建一个文件系统镜像
  inspect     显示镜像的更详细信息
  load        从TAR包或STDIN中加载镜像
  ls          列出镜像
  prune       删除未使用的镜像
  pull        拉取一个镜像或档案
  push        推送一个镜像或档案
  rm          删除镜像
  save        将一个或多个镜像保存到TAR包文件 (默认硫化到STDOUT)
  tag         创建一个TAG

4.2.容器

4.2.1.容器创建

? 创建一个容器,但并不运行:容器名称为msavskit_db,基于镜像ubuntu:20.04,且挂载了/etc/mscore和/usr/local/msresource两个数据卷,数据卷名称分别为msavskit_etc和msresource。使用数据卷可以将数据持久化到主机硬盘。

sudo docker create --name msavskit_db -v msavskit_etc:/etc/mscore -v msresource:/usr/local/msresource   ubuntu:20.04
	--name	定义被创建容器的名称;
	-v		创建数据卷,格式<名称>:<容器内路径>。若不指定名称,将随机分配一个64位的名称;

4.2.2.容器运行

? 创建并运行一个容器:容器名称为msavskit,基于镜像msavskit:01.01.01.38;对外开发端口为8070,8090,8010,8020,映射的端口为8070;使用数据卷容器msavskit_db;

sudo docker run -it --name msavskit -p:8070:8060 -p 8090:8090 -p 8010:8010 -p 8020:8020 --volumes-from msavskit_db msavskit:01.01.01.38
	-t 		让 Docker 这个容器分配一个伪终端;
	-i		打开了交互模式;
	-d		让容器运行在后台;
	--name	定义被创建容器的名称;
	-p		指定端口映射<对外端口>:<容器内端口>
	--volumes-from	指定使用的数据卷容器

4.2.3.容器退出

exit

4.2.4.容器查看

sudo docker ps
	无参数	  列出正在运行的容器;
	-a		列出所有容器;
	-l		列出最后创建的容器;
	-n <n>	列出n个最近创建的容器;
	-f "key=value"	进行多种形式的过滤

4.2.5.容器删除

sudo docker rm  -v [容器ID或名称]

4.2.6.启动和关闭容器

sudo docker start msavskit
sudo docker stop msavskit
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:11:44  更:2022-02-26 12:12:35 
 
开发: 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/16 5:58:19-

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