首页 > 其他分享 >docker阶段01 容器化概述, Docker介绍, 安装, 镜像特性和操作, 容器操作

docker阶段01 容器化概述, Docker介绍, 安装, 镜像特性和操作, 容器操作

时间:2024-06-16 20:10:35浏览次数:19  
标签:容器 01 docker01 镜像 docker root alpine

1.容器化概述

容器: 泛指可以存放其他物品的一种容纳工具,部分和完全封闭的
单台服务器运行多个环境程序

假如让不同的环境程序运行在不同环境中 容器中

怎么实现:
1.通过虚拟化实现,如图,通过kvm相当于创建了多个独立的操作系统

2.通过容器实现,依赖于宿主机操作系统,更省资源。如图

容器实现名称空间隔离    NameSpace    资源隔离

六个资源隔离:
PID            进程编号            2.6.24+(内核版本要求)
NET            网络设备、网络协议栈 端口等    2.26.29+(内核版本要求)
IPC            信息量 消息队列 共享内存    2.6.19+(内核版本要求)
Mount        文件系统 挂载点           2.4.19+(内核版本要求)
UTS            主机名和主机域               2.6.19+
USER        操作进程的用户和用户组        3.8+

#创建docker虚拟环境
>2G        这里给4G操作速度快些
#centos7操作系统内核都是3.10以上
[root@docker01 ~]# uname -r
3.10.0-957.el7.x86_64

2.容器的历史

一个容器包含了完整的运行环境: 除了应用程序本身以外  将所需的依赖  库  二进制文件  配置文件  都统一打包到一个叫容器镜像的包中

容器的优点
    敏捷环境    创建速度快
    提高生产力
    运行环境可移植
    标准化
    版本控制
    安全

容器的缺点
    复杂性增加    平台工具管理    k8s/Mesos
    
容器化和虚拟化区别
    容器相对虚拟机来说更轻量化
    两个都是构建一套能够不依赖于具体环境而运行的应用程序
    虚拟化需要 hypervisor 作为虚拟机监视器  中间层  虚拟机启动都是hypervisor 进行分配资源
    容器不需要hypervisor

3.Docker介绍

Docker是基于容器技术的轻量化虚拟化的解决方案
容器引擎
基于go语言实现的
Docker引入了一整套容器管理的生态系统    包括分层的镜像模型    容器的注册库    API
C/S架构        容器    镜像
容器是隔离的,但是共享操作系统和适当的库和二进制文件    bins    libs

4.Docker安装部署

企业版EE    支持12个月的技术支持        社区版CE    只支持4个月的技术支持
2017年第一季度    使用YY.MM-xx格式
Docker-1.13        老格式


#环境准备,创建docker虚拟环境
4G内存    >50G硬盘

[root@docker01 ~]# iptables-save
[root@docker01 ~]# getenforce
Disabled
[root@docker01 ~]# date
Sat Jun 15 06:47:02 CST 2024
[root@docker01 ~]# uname -r
3.10.0-957.el7.x86_64
[root@docker01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
#确保有源,能上网
[root@docker01 ~]# ll /etc/yum.repos.d
total 8
-rw-r--r--. 1 root root 2523 Jun 14  2023 CentOS-Base.repo
-rw-r--r--. 1 root root  664 Jun 14  2023 epel.repo

#查看系统中默认docker软件
[root@docker01 ~]# yum list docker --show-duplicates
#1.13.1,是2017年的老版本(太老了)

#使用存储库安装
在新主机首次安装Docker Engine之前,需要设置Docker存储库。之后,可以从存储库安装和更新Docker。
设置存储库
安装yum-util软件包(提供yum-config-manager 使用程序)并设置稳定的存储库。

[root@docker01 ~]# yum install -y yum-utils
#设置存储库(官网这个测试无法访问,可以用下面国内存储库)
[root@docker01 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#国内存储库(阿里云库)
[root@docker01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#执行完,查看yum是否有新的docker包
[root@docker01 ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
docker-ce-stable                                                                  | 3.5 kB  00:00:00 
(1/2): docker-ce-stable/7/x86_64/updateinfo                                       |   55 B  00:00:00 
(2/2): docker-ce-stable/7/x86_64/primary_db                                       | 152 kB  00:00:00
base/7/x86_64                          CentOS-7 - Base - mirrors.aliyun.com                        10,072
docker-ce-stable/7/x86_64              Docker CE Stable - x86_64                                      337
epel/x86_64                            Extra Packages for Enterprise Linux 7 - x86_64              13,791
extras/7/x86_64                        CentOS-7 - Extras - mirrors.aliyun.com                         526
updates/7/x86_64                       CentOS-7 - Updates - mirrors.aliyun.com                      6,149
#查看源里docker版本,这个名称是docker-ce
[root@docker01 ~]# yum list docker-ce --show-duplicates

#安装最新版本
[root@docker01 ~]# yum install -y docker-ce
#也可以提前下载包安装
[root@docker01 ~]# rz
docker-ce.tar.gz
[root@docker01 ~]# tar xf docker-ce.tar.gz
[root@docker01 ~]# yum localinstall -y opt/*.rpm

#启动docker,并加入开机自启动
[root@docker01 ~]# systemctl start docker.service
[root@docker01 ~]# systemctl enable docker.service

[root@docker01 ~]# mkdir -p /data/docker

#配置docker (编辑时把注释删掉)
[root@docker01 ~]# vim /etc/docker/daemon.json
{
"data-root": "/data/docker",        #指定工作目录(graph已废弃)
"storage-driver": "overlay2",    #存储驱动
"insecure-registries": ["registry.access.redhat.com","quay.io"], #仓库(这里是默认,可以加私有仓库)
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"], #镜像加速源
"bip": "172.0.181.1/24", #docker容器IP地址(格式:172主机外网ip,0.181内网后两位,最后一位必须从1开始)
"exec-opts": ["native.cgroupdriver=systemd"], #本地的驱动
"live-restore": true #docker服务以外重启时容器自启动(故障自动恢复)
}

#重启,加载配置
[root@docker01 ~]# systemctl restart docker.service

#检查docker版本相关信息
[root@docker01 ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
...

#查看docker信息,如果有返回,说明docker没问题
[root@docker01 ~]# docker info
#默认启动docker会启动iptables,这个iptable做了一些规则,不用管
[root@docker01 ~]# iptables-save

#查看docker命令
[root@docker01 ~]# docker image
#查看docker镜像(两条命令都行)
[root@docker01 ~]# docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

#显示所有的容器
[root@docker01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#启动第一个容器
[root@docker01 ~]# docker run hello-world    #会从docker官方仓库下载
...
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 #docker客户端联系docker守护进程
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 #docker守护进程从docker中心拉取镜像
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 #docker守护进程从镜像创建容器,可执行的程序
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 #docker守护进程将输出流发送docker客户端,你的终端

#查看镜像是否被下载
[root@docker01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB
#查看运行的容器(这里容器已经死了)
[root@docker01 ~]# docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
3c66e988f468   hello-world   "/hello"   8 minutes ago   Exited (0) 8 minutes ago             recursing_sinoussi

5.Docker镜像介绍

镜像        images
容器        container
仓库        repository    repositories    registry

镜像的结构    (查看镜像时名称显示格式)
注册表/仓库名称/镜像名称:版本号    #官方默认,可以不写注册表/仓库名称。非官方的要写
docker.io/library/hello-word:latest    #官方默认的情况真正的显示格式
${registry_name}/${repository_name}/${image_name}:${tag_name}

镜像仓库
https://hub.docker.com/  == https://dockerhub.com/    #会跳转

dockerhub    是一个提供docker镜像的仓库    提供了针对每个镜像的解决方案

#登录docker.io(官方镜像仓库),进去拉取镜像(即使不登录,拉取的也是官方镜像,如果是私有仓库,一定要登录)
[root@docker01 ~]# docker login docker.io
#只有登录成功,才能在这个仓库传镜像,下载镜像

#退出登录
[root@docker01 ~]# docker logout

#登录后,这里会存放用户登录信息
[root@docker01 ~]# cat /root/.docker/config.json

#搜寻镜像
[root@docker01 ~]# docker search alpine
NAME                               DESCRIPTION                                     STARS     OFFICIAL
alpine                             A minimal Docker image based on Alpine Linux…   10883     [OK]
alpinelinux/docker-cli             Simple and lightweight Alpine Linux image wi…   11        
alpinelinux/alpine-gitlab-ci       Build Alpine Linux packages with Gitlab CI      3         
alpinelinux/gitlab-runner-helper   Helper image container gitlab-runner-helper …   7         
...
#下载镜像
[root@docker01 ~]# docker pull alpine:3.12.0    #指定版本,不加版本为最新版本
[root@docker01 ~]# docker pull alpine            #下载最新版本

[root@docker01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB
alpine        3.12.0    a24bb4013296   4 years ago   5.57MB
#镜像上传dockhub自己的私有仓库前要打镜像(这里自定义镜像仓库名称,qls仓库名称也是用户名)
#给镜像打标签(命令中image可以省略)
[root@docker01 ~]# docker image tag a24bb4013296 docker.io/qls/alpine:v3.12.0
#注:打完tag,用查看所有镜像,会有2个镜像,实际是做了引用,删掉原镜像,有tag的镜像也能用

#查看镜像,因为docker.io是官方的,所以版本显示里省略了
[root@docker01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB
alpine        3.12.0    a24bb4013296   4 years ago   5.57MB
qls/alpine    v3.12.0   a24bb4013296   4 years ago   5.57MB

#推送镜像到自己的官方仓库
[root@docker01 ~]# docker push docker.io/qls/alpine:v3.12.0     #这里可以省略docker.io

#从私有仓库下载镜像
[root@docker01 ~]# docker pull docker.io/qls/alpine:v3.10.5

#删除镜像(也可以通过镜像ID)
[root@docker01 ~]# docker rmi alpine:3.12.0
[root@docker01 ~]# docker rmi 5a01c029c96b
#强制删除(如果该镜像对应容器在运行,无法删除,可以强制删除)
[root@docker01 ~]# docker rmi -f hello-world:latest

7.Docker的镜像特性

Docker镜像位于bootfs(file system)或者rootfs之上    文件系统

每层镜像的下面一层镜像称为其父镜像 (父子关系)

第一层镜像都是Base image

容器在最顶层    容器是有状态的  running(UP)  exited  

其下的镜像的所有层都是readonly

Docker将readonly的fs(file system)层称之为image

8.Docker容器的基础操作

#查看本地容器的列表
[root@docker01 ~]# docker ps -all
[root@docker01 ~]# docker ps -a

#启动容器    (运行镜像)
docker run
命令格式
Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

选项:
-i        #表示启动一个可交互式的容器,并能持续打开进行输入(和-t一起使用)
-t        #表示使用终端关联到容器的输入输出(和-i一起使用)
-d        #将容器放入到后台运行
--rm    #退出后即删除容器
--name    #给容器起个名字

COMMAND    #在容器里执行的命令


#启动一个容器(如果本地没有,先从官方下载,再启动。本地有就直接启动)
[root@docker01 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   2 years ago   13.3kB
qls/alpine    v3.12.0   a24bb4013296   4 years ago   5.57MB
#启动容器并进入容器
#注意最小系统alpine里,只认识/bin/sh,没有/bin/bash
[root@docker01 ~]# docker run -ti docker.io/qls/alpine:v3.12.0 /bin/sh
#省略docker.io也可以,因为是默认路径
[root@docker01 ~]# docker run -ti qls/alpine:v3.12.0 /bin/sh
#退出容器,因为交互式容器会关闭
/ # exit

#给容器起名字
[root@docker01 ~]# docker run -ti --name qls qls/alpine:v3.12.0 /bin/sh

#放入后台运行,起个名称test
[root@docker01 ~]# docker run -ti -d --name test qls/alpine:v3.12.0 /bin/sh
759aafa1b3bfe3435921d2fdbcd3777a42bcd639505fc7aa9a8d8939218d4e55

#创建一次性容器,退出后容器就没了。 docker ps -a查不到该镜像了
[root@docker01 ~]# docker run --rm -ti qls/alpine:v3.12.0 /bin/sh

#启动一个非交互式后台运行容器,必须给命令,比如/bin/sh,不给控制不了(命令执行完容器就会结束)
[root@docker01 ~]# docker run -d --name qiudao qls/alpine:v3.12.0 /bin/sleep 300
de478c960115b0581d6f6b4af1ebdaafcc9a0c58f2eb5a3d9dcebd23b8d621a6
[root@docker01 ~]# docker ps -a|grep qiudao
de478c960115   qls/alpine:v3.12.0   "/bin/sh"     2 minutes ago    Exited (0) 2 minutes ago             qiudao
#容器运行的sleep任务能在宿主机搜到,但是不影响其他人
[root@docker01 ~]# ps aux|grep sleep

#进入容器
[root@docker01 ~]# docker ps
CONTAINER ID   IMAGE                COMMAND     CREATED          STATUS          PORTS     NAMES
759aafa1b3bf   qls/alpine:v3.12.0   "/bin/sh"   51 minutes ago   Up 51 minutes             test
#输入容器id或者name都可以 (必须给命令,前台能够执行,才能挂住。否则进入不了)
[root@docker01 ~]# docker exec -it 759aafa1b3bf /bin/sh
[root@docker01 ~]# docker exec -ti test /bin/sh

#停止容器    (输入容器id或者name都可以)
[root@docker01 ~]# docker stop test
test

#启动容器
[root@docker01 ~]# docker start test
test

#重启容器
[root@docker01 ~]# docker restart test

#删除容器(不在运行的)
[root@docker01 ~]# docker rm 0554e547cdcc
#强制删除在运行中的容器
[root@docker01 ~]# docker rm -f test

#批量删除已经死掉的容器
[root@docker01 ~]# for i in $(docker ps -a|grep -i exited|awk '{print $1}');do docker rm -f $i;done

#获取所有容器id
[root@docker01 ~]# docker ps -a -q
de478c960115
79f0afb35a0c
a794ce9de251
3d3b6b604d4e
3c66e988f468
#删除所有容器
[root@docker01 ~]# docker rm -f $(docker ps -a -q)

#可以在xshell里,查看下快速命令里设置批量删除快捷按钮,就不用记了

#修改/提交容器
#创建容器
[root@docker01 ~]# docker run -ti -d --name qls01 qls/alpine:v3.12.0 /bin/sh
a4704b2a191f3796f75ddfad4d041738ec9b1581eeb7fc97e468a6bdef3cb85e
#进入容器
[root@docker01 ~]# docker exec -ti qls01 /bin/sh
/ # echo "test" >> test.txt
/ # exit

#提交镜像
#速度快,添加增加的内容,底层有,不需要重新做镜像(不用管镜像多大,上传镜像只上传追加部分)
[root@docker01 ~]# docker commit -p qls01 docker.io/qls123/alpine:v3.12.0_create_test.txt
sha256:5a01c029c96b41a5718efaaca89aef3b8cc2ad10e4d991e75b062f2a2694797c
[root@docker01 ~]# docker images
REPOSITORY      TAG                       IMAGE ID       CREATED         SIZE
qls123/alpine   v3.12.0_create_test.txt   5a01c029c96b   6 seconds ago   5.57MB
qls/alpine      v3.12.0                   a24bb4013296   4 years ago     5.57MB

#运行一次性镜像,看里面内容
[root@docker01 ~]# docker run --rm docker.io/qls123/alpine:v3.12.0_create_test.txt /bin/cat test.txt
test

#导入导出镜像

#删除镜像
[root@docker01 ~]# docker rmi 5a01c029c96b

#导出镜像
[root@docker01 ~]# docker save a24bb4013296 > alpine_v3.12.0.tar

#导入镜像
[root@docker01 ~]# docker load < alpine_v3.12.0.tar 
#或者
[root@docker01 ~]# docker load -i alpine_v3.12.0.tar
50644c29ef5a: Loading layer  5.845MB/5.845MB
Loaded image ID: sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
#导入后不认识版本和注册表信息
[root@docker01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
<none>       <none>    a24bb4013296   4 years ago   5.57MB
#打个标签
[root@docker01 ~]# docker tag a24bb4013296 docker.io/qls123/alpine:v3.12.0
[root@docker01 ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED       SIZE
qls123/alpine   v3.12.0   a24bb4013296   4 years ago   5.57MB

#查看容器的日志
[root@docker01 ~]# docker run -ti -d --name qls01 qls123/alpine:v3.12.0 /bin/sh
c703ff2732f35c7ac01b443f17c6896d3fbabf063dba10505b8dca2d390194c7
[root@docker01 ~]# docker ps -a
CONTAINER ID   IMAGE                   COMMAND     CREATED          STATUS          PORTS     NAMES
c703ff2732f3   qls123/alpine:v3.12.0   "/bin/sh"   29 seconds ago   Up 28 seconds             qls01
#查看日志
[root@docker01 ~]# docker logs c703ff2732f3
#实时查看日志
[root@docker01 ~]# docker logs -f c703ff2732f3

 

标签:容器,01,docker01,镜像,docker,root,alpine
From: https://www.cnblogs.com/ludingchao/p/18251162

相关文章

  • Centos 7 Docker 安装
    1、设置主机网络,关闭防火墙,selinux等[root@localhost~]#cat/etc/sysconfig/network-scripts/ifcfg-ens32TYPE=EthernetBOOTPROTO=staticNAME=ens32DEVICE=ens32ONBOOT=yesIPADDR=192.168.xxx.10NETMASK=255.255.255.0GATEWAY=192.168.xxx.2DNS1=192.168.xxx.2DNS......
  • 帮猪猪修修改的代码2016年的代码记录
    这是一个图片轮播的代码,但是它们的是css动画,当时代码运行不了,我花了二天才修改,现在记录一下,凭回忆用。<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>网易科技</title><metaname="viewport"content="width=de......
  • 第01章:随堂复习与企业真题(Java语言概述)
    第01章:随堂复习与企业真题(Java语言概述)一、随堂复习1.Java基础全程的学习内容第1阶段:Java基本语法>Java概述、关键字、标识符、变量、运算符、流程控制(条件判断、选择结构、循环结构)、IDEA、数组第2阶段:Java面向对象编程>类及类的内部成员>面向对象的三大特征......
  • 在window 使用 docker 安装redis 踩坑记
    1.安装REDIS在安装的时候,使用dockerpullredis就可以了。但是实际上发现镜像居然拉不下来。修改了一下docker镜像。配置如下:"registry-mirrors":["https://dockerproxy.com","https://docker.m.daocloud.io","https://docker.mirrors.ustc.edu.cn&quo......
  • Docker部署SpringBoot项目
    准备服务器安装Docker下载dockerWindows版本并登录根据项目需要在项目根目录下创建Dockerfile文件#使用官方的OpenJDK8作为基础镜像FROMopenjdk:8-jdk-alpine#维护者信息LABELmaintainer="name"#添加一个应用程序的工作目录WORKDIR/app#将JAR文件添加到......
  • [C++] vector && list 等容器的迭代器失效问题
    标题:[C++]容器的迭代器失效问题@水墨不写bug正文开始:什么是迭代器?    迭代器是STL提供的六大组件之一,它允许我们访问容器(如vector、list、set等)中的元素,同时提供一个遍历容器的方法。然而,在使用迭代器时,我们必须注意所谓的“迭代器失效”问题。一、插入/删......
  • C++双端队列deque源码的深度学习(stack,queue的默认底层容器)
    什么是deque?deque是C++标准模板库(STL)中的一个容器,代表“双端队列”(double-endedqueue)。deque支持在其前端(front)和后端(back)进行快速插入和删除操作,并且它在序列的中间插入和删除元素时通常比vector或list更高效。deque的特点双端插入和删除:你可以在deque的头部和尾部快速......
  • 构建之法阅读笔记01
    个人感受:过去只是盲目的老师说什么就学什么就做什么,没有目标只是一味的去追求老师要求我们的目标。书中也着重提到了这点,要了解软件工程的概念、理论、知识点和软件工程和计算机科学的关系,提升个人的技术和流程,而不能盲目的进行学习要有一定的目标和安排。解决办法:设立自己的学......
  • 01构建之法阅读笔记之一
    《构建之法》阅读笔记《构建之法》是一部关于创造和建设的书籍,作者通过深入探讨构建的原则和方法,向读者展示了如何在各种领域内构建出卓越的成果。以下是对这本书的阅读笔记:主题和核心观点《构建之法》主要讨论了成功的构建过程中所需的关键因素。作者认为,构建不仅仅是搭建结构......
  • C++PrimerPlus:第十三章类和继承:静态联编和动态联编001
    第十三章类和继承:静态联编和动态联编提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:静态联编和动态联编提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录第十三章类和继承:静态联编和动态联编前言一、指针和引用类型的兼......