Docker基础入门:从0开始学习容器化技术

Docker基础入门:从零开始学习容器化技术

  • 一、Docker基础
    • 1.1、Docker起源
    • 1.2、Docker概念
    • 1.3、Docker优势
    • 1.4、Docker 的组成
  • 二、Docker安装
    • 2.1、卸载旧版Docker
    • 2.2、需要的安装包依赖
    • 2.3、设置镜像仓库
    • 2.4、更新yum软件包索引
    • 2.5、安装Docker--社区版
    • 2.6、配置镜像加速(阿里云加速器地址--每个人地址不一致):
    • 2.7、启动 | 停止Docker
    • 2.8、测试--hello-world
    • 2.9、查看Docker镜像
    • 2.10、Docker进程查看
  • 三、Docker常用命令
    • 3.1、帮助命令
    • 3.2、镜像查找命令
    • 3.3、镜像下载命令
    • 3.4、镜像删除命令
    • 3.5、容器、数据卷、镜像等空间查看
  • 四、容器命令
    • 4.1、下载容器
    • 4.2、启动容器
    • 4.2、测试---交互式启动centos
    • 4.3、测试---后台启动容器
    • 4.3、删除容器
    • 4.4、常用容器命令
  • 五、Docker其他命令
    • 5.1、查看日志
    • 5.2、查看容器进程信息
    • 5.3、查看容器元数据
    • 5.4、查看、进入当前正在运行的容器
    • 5.5、从容器拷贝文件到主机


💖The Begin💖点点关注,收藏不迷路💖

一、Docker基础

在这里插入图片描述

1.1、Docker起源

Docker起源于2013年,由Docker公司(前身为dotCloud公司)创造和推广。它是一个开源的容器化平台,旨在简化应用程序的部署和管理。

在过去,应用程序的部署和运行环境往往存在着依赖关系和配置差异,这导致了许多问题,例如运行环境不兼容、难以移植和难以管理等。为了解决这些问题,Docker应运而生。

1.2、Docker概念

Docker 是一个可以将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。

Docker的核心概念是容器,它是一种轻量级且独立的运行环境,可以在任何操作系统上运行。与传统的虚拟化技术相比,容器不需要额外的操作系统,它们共享主机的内核,因此更加高效和灵活。

1.3、Docker优势

通过使用Docker,开发人员可以将应用程序及其依赖项打包成一个容器,并在任何支持Docker的环境中运行,而无需担心环境差异和配置问题。这使得应用程序的部署变得简单、快速和可靠。

Docker还提供了一套强大的工具和功能,如镜像管理、容器编排和网络管理等,使得应用程序的管理和扩展变得更加容易。此外,Docker的生态系统非常丰富,有大量的镜像和工具可供使用,为开发人员提供了更多的选择和便利。

1.4、Docker 的组成

在这里插入图片描述

1、Docker 主机(Host):
一个物理机或虚拟机,用于运行Docker服务进程和容器,也称为宿主机,node节点。

2、Docker 服务端(Server):
Docker守护进程,运行docker容器。

3、Docker 客户端(Client):
客户端使用docker 命令或其他工具调用docker API。

4、Docker 仓库(Registry):
保存镜像的仓库(公有和私有仓库), 官方仓库:,可以搭建私有仓库harbor。

5、Docker 镜像(Images):
镜像可以理解为创建实例使用的模板,用来创建容器服务,可以通过镜像创建多个容器。

6、Docker 容器(Container):
容器是从镜像生成对外提供服务的一个或一组服务。

在这里插入图片描述

二、Docker安装

Docker是基于Go语言开发的!开源项目!
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
Doker镜像仓库地址:https://hub.docker.com/

前提:

#1、系统内核为3.10以上、要求系统为64位(x86_64)
[root@zyl-server ~]# uname -r
3.10.0-1160.el7.x86_64
[root@zyl-server ~]# 

#2、查看系统版本
[root@zyl-server ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

[root@zyl-server ~]# 

2.1、卸载旧版Docker

sudo yum remove docker*
###或者使用
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2.2、需要的安装包依赖

yum install -y yum-utils

在这里插入图片描述

2.3、设置镜像仓库

###使用国内镜像仓库地址
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo   #国外

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #国内

在这里插入图片描述

2.4、更新yum软件包索引

yum makecache fast

在这里插入图片描述

2.5、安装Docker–社区版

相关版本:docker-ce(社区版)、 docker-ee(企业版)。

docker-ce ----->社区版
docker-ce-cli ----->命令行
containerd.io ----->docker容器化运行环境

##默认不指定版本则安装最新版。
yum install docker-ce docker-ce-cli containerd.io

##指定版本安装
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

在这里插入图片描述

2.6、配置镜像加速(阿里云加速器地址–每个人地址不一致):

如何获取自己阿里云的镜像加速地址:
1、登录后打开阿里云的控制台
2、在控制台中找到“容器镜像服务”
在这里插入图片描述

###1、通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lqwtpdhx.mirror.aliyuncs.com"]
}
EOF

###2、修改保存后,重启Docker以使配置生效。
sudo systemctl daemon-reload 
sudo systemctl restart docker

##3、查看配置是否生效。
##执行 docker info,查看是否含有如下信息(最后):

Registry Mirrors:
  https://lqwtpdhx.mirror.aliyuncs.com/

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

2.7、启动 | 停止Docker

systemctl start docker      #启动
systemctl stop docker       #停止
systemctl restart docker    #重启
systemctl status docker     #查看状态
systemctl enable docker     #开机自启

[root@zyl-server ~]# systemctl start docker
[root@zyl-server ~]# docker version  #查看是否安装成功

在这里插入图片描述

2.8、测试–hello-world

docker run hello-world

在这里插入图片描述

2.9、查看Docker镜像

[root@zyl-server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   23 months ago   13.3kB
[root@zyl-server ~]# 

2.10、Docker进程查看

[root@zyl-server ~]# ps -ef |grep docker
root       1502      1  0 22:07 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root       1794   1266  0 22:16 pts/0    00:00:00 grep --color=auto docker
[root@zyl-server ~]# 

三、Docker常用命令

在这里插入图片描述

3.1、帮助命令

docker version         #docker版本
docker info            #查看系统信息,镜像和容器数量
docker 命令 --help     #帮助命令

3.2、镜像查找命令

#1、查看本机上的镜像
docker images       

[root@zyl-server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   23 months ago   13.3kB
[root@zyl-server ~]# 

#可选项
docker images -a        #列出本地所有镜像,含历史镜像
docker images  -q       #只显示镜像id

在这里插入图片描述

#2、镜像搜索,如搜索nginx、mysql
docker search nginx
docker search mysql


#可选项,通过收藏等过滤
docker search nginx --filter=STARS=3000
docker search mysql --filter=STARS=3000

#3、  镜像搜索前5个(默认前20)
docker search --limit 5 镜像名称   

3.3、镜像下载命令

docker pull mysql   #镜像下载

docker pull 镜像名[:tag]  ,如果不写tag,默认最后一个latest,下载最新版本

docker pull mysql:5.7  #指定版本下载

3.4、镜像删除命令

docker rmi -f 镜像id  #删除指定镜像

docker rmi -f 镜像id 镜像id  镜像id  #删除多个镜像

docker rmi -f $(docker images -aq)  #删除所有镜像

3.5、容器、数据卷、镜像等空间查看

[root@zyl-server ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         13.26kB   0B (0%)
Containers      1         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B
[root@zyl-server ~]# 

四、容器命令

镜像是创建docker容器的基础,有了镜像,才可以下载容器。即容器是镜像的运行实体。而仓库的作用则是存储和分发镜像。

4.1、下载容器

docker pull nginx   #下载容器

4.2、启动容器

docker run [可选参数] image

参数说明

--name="Name"   容器名,用来区分容器
-d              后台方式运行
-it             使用交互式方式运行,进入容器查看命令
-p              指定容器端口  80808080
-P              随机指定端口

4.2、测试—交互式启动centos

1、启动、 #交互式启动并进入容器
[root@zyl-server ~]# docker run -it centos /bin/bash
[root@11122b0ec822 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@11122b0ec822 /]# 

2、退出容器  
exit   #退出并停止运行
Ctrl+P+Q #退出不停止


docker ps 列出所有运行中的容器

docker ps -a  # 列出正在运行的容器,并列出历史运行过的容器

docker ps -n=?    #显示最近创建的容器

[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
11122b0ec822   centos    "/bin/bash"   About a minute ago   Up About a minute             distracted_wing
[root@zyl-server ~]# docker ps -n=1
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
11122b0ec822   centos    "/bin/bash"   2 minutes ago   Up 2 minutes             distracted_wing
[root@zyl-server ~]# 

在这里插入图片描述

4.3、测试—后台启动容器

#命令  
docker run -d 镜像名  ##重启之后不会自动运行


docker run -d --restart=always 镜像名  ##重启之后自动运行容器

#启动后centos容器停止运行,原因,docker使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会停止运行

[root@zyl-server ~]# docker run -d centos
ab35c8c20470fe9faaed153b1f245c557838d5a7006c9d9b3cfbd5042dcf8923
[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@zyl-server ~]# 

解决---使用命令:  
docker run -t -d centos

[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
780530eaf656   centos    "/bin/bash"              4 seconds ago    Up 4 seconds              wizardly_dhawan
95420eae9ad9   nginx     "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp    great_pasteur
[root@zyl-server ~]# 

4.3、删除容器

docker rm 容器id            #删除指定容器,不能删除正在运行的容器

docker rm -f $(docker ps -aq)    #全部删除
docker ps -a -q|xargs docker rm   #全部删除

4.4、常用容器命令

docker start 容器id/容器名  ##启动
docker restart 容器id/容器名  ##重启
docker stop  容器id/容器名  ##停止
docker kill 容器id/容器名   ##kill进程
docker ps   ###列出当前运行的容器
docker ps | grep 容器id/容器名   ## 查看进程是否正常
docker ps -a ###列出所有容器

五、Docker其他命令

5.1、查看日志

docker logs  -t -f  --tail  818a1b71af6c 

  
docker logs  -t -f  --tail  [条数]  818a1b71af6c   显示10[root@zyl-server ~]# docker logs -t -f --tail  95420eae9ad9
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container
[root@zyl-server ~]# 

5.2、查看容器进程信息

docker top  容器id

[root@zyl-server ~]# docker top 95420eae9ad9
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11067               11047               0                   23:11               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 11111               11067               0                   23:11               ?                   00:00:00            nginx: worker process
101                 11112               11067               0                   23:11               ?                   00:00:00            nginx: worker process
[root@zyl-server ~]# 

5.3、查看容器元数据

docker inspect  容器id

[root@zyl-server ~]#  docker inspect 95420eae9ad9

5.4、查看、进入当前正在运行的容器

方式一、docker exec -it  容器id /bin/bash     #进入容器,开启一个新的终端,可以命令操作

[root@zyl-server ~]# docker exec -it 780530eaf656 /bin/bash
[root@818a1b71af6c /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@818a1b71af6c /]#

方式二、docker attach 容器id           #进入正在运行的终端,不会启动新进程

[root@zyl-server ~]# docker attach 780530eaf656
[root@818a1b71af6c /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@818a1b71af6c /]#

5.5、从容器拷贝文件到主机

docker cp 容器id:容器路径   目的主机路径

[root@zyl-server ~]# docker exec -it 780530eaf656  /bin/bash
[root@780530eaf656 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@780530eaf656 /]# 
[root@780530eaf656 /]# cd home/
[root@780530eaf656 home]# touch test.java
[root@780530eaf656 home]# ls
test.java
[root@780530eaf656 home]# pwd
/home
[root@780530eaf656 home]# exit  ##退出不停止
exit
[root@zyl-server ~]# 

###从docker 内部的小型centos 拷贝文件到主机
[root@zyl-server ~]# docker cp 780530eaf656:home/test.java /
Successfully copied 1.54kB to /
[root@zyl-server ~]# cd /
[root@zyl-server /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test.java  tmp  usr  var
[root@zyl-server /]# 

在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/81851.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

线程池原理

一、线程池的定义 线程池&#xff0c;按照配置参数&#xff08;核心线程数、最大线程数等&#xff09;创建并管理若干线程对象&#xff0c;没有任务的时候&#xff0c;这些线程都处于等待空闲状态。如果有新的线程任务&#xff0c;就分配一个空闲线程执行。如果所有线程都处于…

[三次握手]TCP三次握手由入门到精通(知识精讲)

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

删除有序链表中重复的元素-II(链表)

乌&#xff01;蒙&#xff01;山&#xff01;连&#xff01;着&#xff01;山&#xff01;外&#xff01;山&#xff01; 题目&#xff1a; 思路&#xff1a; 双指针&#xff0c;slow和fast&#xff0c;并且增加标记flag初始为1。 如果slow指向节点值等于fast指向节点值&…

pytorch3d成功安装

一、pytorch3d是什么&#xff1f; PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂&#xff0c;在从事Mesh R-CNN和C3DPO等项目时&#xff0c;我们遇到了一些挑战&#xff0c;包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象&#xf…

React快速入门

最近需要学到react&#xff0c;这里进行一个快速的入门&#xff0c;参考react官网 1.创建和嵌套组件 react的组件封装是个思想&#xff0c;我这里快速演示代码&#xff0c;自己本身也不太熟悉。 代码的路径是src底下的App.js function MyButton() {return (<button>I…

JVM前世今生之JVM内存模型

JVM内存模型所指的是JVM运行时区域&#xff0c;该区域分为两大块 线程共享区域 堆内存、方法区&#xff0c;即所有线程都能访问该区域&#xff0c;随着虚拟机和GC创建和销毁 线程独占区域 虚拟机栈、本地方法栈、程序计数器&#xff0c;即每个线程都有自己独立的区域&#…

USB隔离器电路分析,SA8338矽塔sytatek电机驱动,源特科技VPS8701,开关电源,电源 大师

一、 USB隔离器电路分析 进行usb隔离可以使用USB隔离模块 ADUM3160 ADUM4160 注意&#xff1a;B0505S 最大带载0.16A&#xff0c;副边需要带载能力需要改变方案 比如移动硬盘至少需要0.5A 用充电宝、18650、设计5V1A输出电源 二、 1A隔离电压方案

掌握指针进阶:探索字符指针、数组指针和指针数组的妙用

&#x1f341;博客主页&#xff1a;江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言进阶之路 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa;我的社区&#xff1a;GeekHub &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文章目录 一…

Python应用工具-Jupyter Notebook

工具简介 Jupyter Notebook是 基于 网页的用于交互计算的 应用程序&#xff0c;以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运行代码&#xff0c;代码的运行结果也会直接在代码块下 显示&#xff0c;文档是保存为后缀名为 . ipynb 的 JSON 格式文件。 操作指令…

Shell脚本基础( 四: sed编辑器)

目录 1 简介 1.1 sed编辑器的工作流程 2 sed 2.1 基本用法 2.2 sed基本格式 2.2.1 sed支持正则表达式 2.2.2 匹配正则表达式 2.2.3 奇数偶数表示 2.2.4 -d选项删除 2.2.5 -i修改文件内容 2.2.6 -a 追加 2.3 搜索替代 2.4 变量 1 简介 sed是一种流编辑器&#xff0c;…

【开发】视频云存储EasyCVR视频汇聚平台AI智能算法定制

安防视频集中存储EasyCVR视频汇聚平台&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等功能。为了便…

【0815作业】搭建select的TCP客户端、poll客户端、tftp文件上传

IO多路复用&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09; 进程中如果同时需要处理多路输入输出流&#xff0c;在使用单进程单线程的情况下&#xff0c;同时处理多个输入输出请求。在无法用多进程多线程&#xff0c;可以选择用IO多路复用&#xff1b;由于不…

Redis之List类型解读

目录 List简介 数据结构 常见命令 概述 ​LPUSH key value1 [value2] ​ LPUSHX key value LINDEX key index LLEN key LPOP key LRANGE key start stop List简介 列表list是一个单键多值的 Redis 列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加…

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现SSA-SVM麻雀搜索算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基…

IDEA下方工具栏SideBar没有Services解决方法 IDEA配合微服务学习多端口管理打开Services栏方法

问题 微服务学习时&#xff0c;一次要打开多个端口&#xff0c;比如8080给order模块、8081给user模块……这就需要用idea管理多端口。 这时候就可以用到Services栏进行管理。 解决 首先看下方Sidebar没有Services。 打开Services 打开方式一&#xff1a;手动打开 在IDEA中…

STM32使用IIC通信的引脚配置问题

STM32使用IIC通信的引脚配置问题 在使用IIC通信时&#xff0c;遇到引脚配置问题&#xff0c;记录一下&#xff1a; IIC的两个引脚SDA和SCL都要求既能输入又能输出。 问题&#xff1a; SDA线是由不同的器件分时控制的&#xff0c;这样就会有一个问题&#xff1a;当一个器件主动…

RabbitMQ的5种消息队列

RabbitMQ的5种消息队列 1、七种模式介绍与应用场景 1.1 简单模式(Hello World) 一个生产者对应一个消费者&#xff0c;RabbitMQ 相当于一个消息代理&#xff0c;负责将 A 的消息转发给 B。 应用场景&#xff1a;将发送的电子邮件放到消息队列&#xff0c;然后邮件服务在队列…

Java虚拟机(JVM):虚拟机栈溢出

一、概念 Java虚拟机栈溢出&#xff08;Java Virtual Machine Stack Overflow&#xff09;是指在Java程序中&#xff0c;当线程调用的方法层级过深&#xff0c;导致栈空间溢出的情况。 Java虚拟机栈是每个线程私有的&#xff0c;用于存储方法的调用和局部变量的内存空间。每当…

csapp archlab PartC满分解答

任务 修改ncopy.ys和pipe-full.hcl以尽可能的提高ncopy.ys的运行速度 思路 pipe-full.hcl&#xff1a; 实现iaddq指令&#xff08;家庭作业4.54&#xff09;实现加载转发&#xff08;家庭作业4.57&#xff09; ncopy.ys&#xff1a; 使用循环展开&#xff08;第5.8节&…

2023国赛数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…