Docker的安装和镜像容器的基本操作

  • Docker 概述
    • Docker与虚拟机的区别
    • namespace的六项隔离
    • Docker核心概念
  • 安装 Docker
    • Docker 镜像操作
      • 搜索镜像
      • 获取镜像
      • 镜像加速下载
      • 查看镜像信息
      • 查看下载的镜像文件信息
      • 查看下载到本地的所有镜像
      • 根据镜像的唯一标识 ID 号,获取镜像详细信息
      • 为本地的镜像添加新的标签
      • 删除镜像
      • 存出镜像:将镜像保存成为本地文件
      • 载入镜像:将镜像文件导入到镜像库中
      • 上传镜像
    • Docker 容器操作
      • 容器创建:就是将镜像加载到容器的过程。
      • 查看容器的运行状态
    • 基于现有镜像创建
      • 首先启动一个镜像,在容器里做修改
      • 然后将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像
    • 部署Apache镜像
      • 建立工作目录
      • 准备Dockerfile文件
      • 准备执行脚本。使用方法一的情况下需要准备执行脚本
      • 准备网站页面
      • 生成镜像(构建镜像)
      • 使用新镜像运行容器
      • 使用主机IP和1314端口,测试网页访问

Docker 概述

Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。

Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,
即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

容器化越来越受欢迎,因为容器是:
●灵活:即使是最复杂的应用也可以集装箱化。
●轻量级:容器利用并共享主机内核。
●可互换:可以即时部署更新和升级。
●便携式:可以在本地构建,部署到云,并在任何地方运行。
●可扩展:可以增加并自动分发容器副本。
●可堆叠:可以垂直和即时堆叠服务。

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

Docker与虚拟机的区别

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗 50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源隔离/限制 完全隔离

namespace的六项隔离

namespace 系统调用参数 隔离内容
UTS CLONE_NEWUTS 主机名与域名
IPC CLONE_NEWWIPC 信号量、消息队列和共享内存
PID CLONE_NEWPID 进程编号
NETWORK CLONE_NEWNET 网络设备、网络栈、端口等
MOUNT CLONE_NEWNS 挂载点(文件系统)
USER CLONE_NEWUSER 用户和用户组(3.8以后的内核才支持〉

Docker核心概念

●镜像
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。

●容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

●仓库
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker

安装 Docker

[root@localhost ~]# systemctl stop firewalld.service && setenforce 0
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su[root@docker01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
## 安装依赖包
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------[root@docker01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#设置阿里云镜像源[root@docker01 ~]# yum install -y docker-ce docker-ce-cli containerd.io
#安装 Docker-CE并设置为开机自动启动[root@docker01 ~]# systemctl start docker.service--------------------------------------------------------------------------------------------
安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。
--------------------------------------------------------------------------------------------
[root@docker01 ~]# systemctl status docker.service
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: active (running) since 六 2023-04-22 18:16:54 CST; 9s agoDocs: https://docs.docker.comMain PID: 38000 (dockerd)Memory: 31.3MCGroup: /system.slice/docker.service└─38000 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/conta...4月 22 18:16:53 docker01 dockerd[38000]: time="2023-04-22T18:16:53.933111832+...c
4月 22 18:16:53 docker01 dockerd[38000]: time="2023-04-22T18:16:53.933647467+...c
4月 22 18:16:53 docker01 dockerd[38000]: time="2023-04-22T18:16:53.933670360+...c
4月 22 18:16:53 docker01 dockerd[38000]: time="2023-04-22T18:16:53.983036183+..."
4月 22 18:16:54 docker01 dockerd[38000]: time="2023-04-22T18:16:54.147471090+..."
4月 22 18:16:54 docker01 dockerd[38000]: time="2023-04-22T18:16:54.183113548+...4
4月 22 18:16:54 docker01 dockerd[38000]: time="2023-04-22T18:16:54.183319945+..."
4月 22 18:16:54 docker01 dockerd[38000]: time="2023-04-22T18:16:54.205515678+...c
4月 22 18:16:54 docker01 systemd[1]: Started Docker Application Container Engine.
4月 22 18:16:54 docker01 dockerd[38000]: time="2023-04-22T18:16:54.210028329+..."
Hint: Some lines were ellipsized, use -l to show in full.

[root@docker01 ~]# docker version

[root@docker01 ~]# docker info
## docker 信息查看Client:Context:    defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version:  v0.10.4Path:     /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version:  v2.17.2Path:     /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 0    # 容器数量Running: 0Paused: 0Stopped: 0Images: 0    # 镜像数量Server Version: 23.0.4     # server 版本Storage Driver: overlay2    # docker 使用的是 overlay2 文件驱动Backing Filesystem: xfs    # 宿主机上的底层文件系统Supports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfs    # Cgroups 驱动Cgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 2806fc1057397dbaeefbea0e4e17bddfbd388f38runc version: v1.1.5-0-gf19387ainit version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-693.el7.x86_64    # 宿主机的相关信息Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 12Total Memory: 3.843GiBName: docker01ID: 0b29a2d9-809e-444c-9c78-808fbf340159Docker Root Dir: /var/lib/docker   # docker 数据存储目录Debug Mode: falseRegistry: https://index.docker.io/v1/   # registry 地址Labels:Experimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:                          # 加速站点Live Restore Enabled: false

Docker 镜像操作

搜索镜像

格式:docker search 关键字

[root@docker01 ~]# docker search nginx

获取镜像

格式:docker pull 仓库名称[:标签]
如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。

docker pull nginx

镜像加速下载

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置**

mkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://y3m1b6i6.mirror.aliyuncs.com"]
}
EOFsystemctl daemon-reload
systemctl restart docker

查看镜像信息

镜像下载后存放在 /var/lib/docker 。
Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。

查看下载的镜像文件信息

cat /var/lib/docker/image/overlay2/repositories.json

查看下载到本地的所有镜像

[root@docker01 ~]#  docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    6efc10a0510f   10 days ago   142MB

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

根据镜像的唯一标识 ID 号,获取镜像详细信息

格式:docker inspect 镜像ID号

docker inspect 6efc10a0510f

为本地的镜像添加新的标签

格式:docker tag 名称:[标签] 新名称:[新标签]

docker tag nginx:latest nginx:webdocker images | grep nginx

删除镜像

格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

docker rmi nginx:web

存出镜像:将镜像保存成为本地文件

格式:docker save -o 存储文件名 存储的镜像

docker save -o nginx nginx:latest            #存出镜像命名为nginx存在当前目录下
ls -lh

载入镜像:将镜像文件导入到镜像库中

格式:
docker load < 存出的文件
或者
docker load -i 存出的文件

docker load < nginx

上传镜像

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

docker tag nginx:latest soscscs/nginx:web        #添加新的标签时必须在前面加上自己的dockerhub的username
docker login                                #登录公共仓库
Username:soscscs
password:abc123456
docker push soscscs/nginx:web                   #上传镜像




Docker 容器操作

容器创建:就是将镜像加载到容器的过程。

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create [选项] 镜像
常用选项:
-i:让容器开启标准输入
-t:让 Docker 分配一个伪终端 tty
-it :合起来实现和容器交互的作用,运行一个交互式会话 shell

[root@docker01 ~]# docker create -it nginx:latest /bin/bash
2154c8b190f0284bd0b2b2733f642a1228b78f9720d428952fd8ea0076e8bbad

查看容器的运行状态

[root@docker01 ~]# docker ps -a   #-a 选项可以显示所有的容器
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS    PORTS     NAMES
2154c8b190f0   nginx:latest   "/docker-entrypoint.…"   6 seconds ago   Created             dazzling_wescoff容器的ID号    加载的镜像     运行的程序               创建时间       当前的状态  端口映射  名称

基于现有镜像创建

首先启动一个镜像,在容器里做修改

[root@docker01 ~]# docker run -it centos:7 /bin/bash
#启动容器
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7

[root@048ef3f5bf35 /]#  yum install -y epel-release
#安装epel源

[root@048ef3f5bf35 /]# yum install -y nginx
#安装nginx

[root@048ef3f5bf35 /]#  yum install net-tools -y#安装tools工具

[root@048ef3f5bf35 /]# nginx
#启动服务[root@048ef3f5bf35 /]# netstat -natp |grep 80
##  #查看端口是否开启tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      131/nginx: master p
tcp6       0      0 :::80                   :::*                    LISTEN      131/nginx: master p
[root@048ef3f5bf35 /]# 

[root@048ef3f5bf35 /]# exit
exit
[root@docker01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                       PORTS     NAMES
048ef3f5bf35   centos:7       "/bin/bash"               7 minutes ago    Exited (127) 5 seconds ago             nifty_greider
2154c8b190f0   nginx:latest   "/docker-entrypoint.…"   21 minutes ago   Created                                dazzling_wescoff

然后将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像

[root@docker01 ~]# docker commit -m "new nginx" -a "[指定作者信息]" 048ef3f5bf35 nginx:centos
sha256:5ca4481808e7e4e34d664c905feee425516c6962e05d8bb6fa69e5b86a80c538#常用选项:-m 指定说明信息;-a 指定作者信息;-p 生成过程中停止容器的运行。048ef3f5bf35 原容器ID。nginx:centos  生成新的镜像名称。

[root@docker01 ~]# docker images
#查看生成的新镜像REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
nginx             centos    5ca4481808e7   2 minutes ago   482MB
docker.../nginx   web       6efc10a0510f   10 days ago     142MB
nginx             latest    6efc10a0510f   10 days ago     142MB
centos            7         eeb6ee3f44bd   19 months ago   204MB

[root@docker01 ~]# docker run -itd nginx:centos bash
#使用新的镜像创建容器55d1507297fa970885698e4b85ea096bfd146598c809951c5bc927e457a4f6c2

[root@docker01 ~]#  docker ps -a
#查看容器状态CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                       PORTS     NAMES
55d1507297fa   nginx:centos   "bash"                    21 seconds ago   Up 21 seconds                          elegant_yalow
048ef3f5bf35   centos:7       "/bin/bash"               15 minutes ago   Exited (127) 7 minutes ago             nifty_greider
2154c8b190f0   nginx:latest   "/docker-entrypoint.…"   28 minutes ago   Created                                dazzling_wescoff

[root@docker01 ~]# docker exec -it 55d1507297fa bash
#进入容器

[root@55d1507297fa /]# nginx
#启动nginx服务
[root@55d1507297fa /]# netstat -natp |grep 80
#查看80端口是否开启
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      30/nginx: master pr
tcp6       0      0 :::80                   :::*                    LISTEN      30/nginx: master pr 

部署Apache镜像

建立工作目录

[root@55d1507297fa /]# exit
exit
[root@docker01 ~]#  mkdir /opt/apache
[root@docker01 ~]# cd /opt/apache

准备Dockerfile文件

[root@docker01 apache]# vim DockerfileFROM centos:7MAINTAINER this is apache image <dockerbmm>RUN yum -y install httpdEXPOSE 80ADD index.html /var/www/html/ADD run.sh /run.shRUN chmod 755 /run.shCMD ["/run.sh"]
ENTRYPOINT ["/usr/sbin/apachectl"]CMD ["-D", "FOREGROUND"]

准备执行脚本。使用方法一的情况下需要准备执行脚本

[root@docker01 apache]#  vim run.sh#!/bin/bashrm -rf /run/httpd/*/usr/sbin/apachectl -D FOREGROUND

准备网站页面

[root@docker01 apache]#  echo "this is apache web" > index.html

生成镜像(构建镜像)

[root@docker01 apache]# docker build -t httpd:centos .

使用新镜像运行容器

[root@docker01 apache]#  docker run -d -p 1314:80 httpd:centos
#指定映射端口1314
f03db882f1c9d269fc45cf9ede3e2dcd3f7b8ba11e6962f4f6824c7726ddd68f

[root@docker01 apache]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                        PORTS                                   NAMES
f03db882f1c9   httpd:centos   "/usr/sbin/apachectl…"   31 seconds ago   Up 30 seconds                 0.0.0.0:1314->80/tcp, :::1314->80/tcp   practical_meninsky
55d1507297fa   nginx:centos   "bash"                    21 minutes ago   Up 21 minutes                                                         elegant_yalow
048ef3f5bf35   centos:7       "/bin/bash"               35 minutes ago   Exited (127) 28 minutes ago                                           nifty_greider
2154c8b190f0   nginx:latest   "/docker-entrypoint.…"   49 minutes ago   Created                                                               dazzling_wescoff

使用主机IP和1314端口,测试网页访问

Docker的安装和镜像容器的基本操作相关推荐

  1. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  2. Docker的安装和Redis容器

    Docker的安装和Redis容器 Docker安装,环境:虚拟机CentOS 8:阿里云镜像加速:Redis容器创建. CentOS 8的安装就不在这里演示了 连接CENTOS 使虚拟机与物理机在同 ...

  3. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

    Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  4. docker环境安装,镜像和容器常用命令

    docker学习笔记 1 docker环境安装 1.1 安装yum-utils yum install -y yum-utils device-mapper-persistent-data lvm2 ...

  5. Docker - 编译安装nginx镜像

    目录 知识点1:制作镜像的常用指令 RUN和CMD/ENTRYPOINT的区别 首先需要一个安装nginx的脚本 制作Dockerfile 开始制作镜像 查看镜像是否制作成功 启动一个容器来测试镜像 ...

  6. docker离线安装mysql镜像

    1.拷贝mysql离线包 下载地址: 链接: https://pan.baidu.com/s/1pqV2Olqe1zyPfdy-E8bagA 提取码: vx28 1.1.将mysql-57.gz 安装 ...

  7. docker:安装ubuntu镜像

    当使用服务器时,需要使用 docker 管理虚拟环境. 教程 1. 确认 docker 是否安装 docker -v 或者: docker 如未安装,请先安装 2. 安装 ubuntu 14.04 镜 ...

  8. Docker 中 安装Linux镜像

    docker  最为 现在很流行的一个引擎技术,被广泛使用,当你想要需要一个Linux环境的时候,在docker里,就很容易实现了,简单几步就ok了! 准备条件: 1.已安装docker  2.至少安 ...

  9. Docker离线安装Nvidia-container-toolkit实现容器内GPU调用

    目录 背景 预先准备 Nvidia-container-toolkit架构 架构 依赖关系 离线安装 安装顺序 软件下载 安装 测试 背景 需求:实验室内通过Docker搭建隔离环境保证各用户数据安全 ...

最新文章

  1. echarts中树图的label的点击_ECharts 堆积木(砖块)游戏
  2. 你根本不懂rebase-使用rebase打造可读的git graph
  3. YBTOJ:最短时间(长链剖分、线段树)
  4. CV新赛事|CT影像诊断新冠肺炎北京垃圾分类识别~文末有福利
  5. 在 Laravel 应用中使用 pjax 进行页面加速
  6. Boost Graph
  7. orbslam2+azure kinect DK稠密重建
  8. iis php性能优化,iis优化网站运行速度 网站浏览更加快
  9. iphone 6 设置自定义铃声(未越狱)
  10. 大学四年,因为这40个开发工具,我成为别人眼中的大神
  11. pythonbmi代码_用python写一个BMI体制指数测试
  12. iOS App Clips学习笔记
  13. ArcGIS中统计渔网中栅格人口密度
  14. 机器学习:python常用可视化技巧
  15. [java实现]辗转相除法
  16. 《Flutter 控件大全》第九十六:TextField、EditableText、TextInput
  17. 基于python+django框架+Mysql数据库的在线电子书阅读系统设计与实现
  18. 从零开始学习Linux运维,成为IT领域翘楚(二)
  19. 计算机dll修复,DLL缺失怎么办 DLL怎么修复
  20. Excel使用SQL进行查询

热门文章

  1. html5 ios cookie,iOS cookie
  2. 常用的MIMETYPE列表
  3. 回忆2012年在提高班的成长过程
  4. apache服务报错Could not reliably determine the server's fully qualified domain name
  5. mmdetection安装使用
  6. pyecharts中有关Line的相关事项
  7. iPhone升级到ios5收不到电话和短信的解决方法
  8. excel另存为PDF,然后保持缩放
  9. 数据被误删了,着急恢复就这样干!
  10. MR-GNN: Multi-Resolution and Dual Graph Neural Network for Predicting Structured Entity Interactions