Docker(二):Docker的基本使用

news2024/11/5 6:41:10

1 Docker的基本使用

1.1 镜像相关操作

1、从DockerHub搜索镜像

[root@master ~]# docker search centos
# 镜像名字                          描述                                             星标      是否官方(有OK表示为官方镜像)
NAME                               DESCRIPTION                                      STARS     OFFICIAL
centos                             DEPRECATED; The official build of CentOS.        7718      [OK]
kasmweb/centos-7-desktop           CentOS 7 desktop for Kasm Workspaces             43
bitnami/centos-base-buildpack      Centos base compilation image                    0
dokken/centos-7                    CentOS 7 image for kitchen-dokken                8
dokken/centos-8                    CentOS 8 image for kitchen-dokken                6
spack/centos7                      CentOS 7 with Spack preinstalled                 2
dokken/centos-6                    EOL: CentOS 6 image for kitchen-dokken           0
spack/centos6                      CentOS 6 with Spack preinstalled                 1
ustclug/centos                     Official CentOS Image with USTC Mirror           0
dokken/centos-stream-8                                                              5
eclipse/centos_jdk8                CentOS, JDK8, Maven 3, git, curl, nmap, mc, …   5
dokken/centos-stream-9                                                              9
corpusops/centos-bare              https://github.com/corpusops/docker-images/      0
corpusops/centos                   centos corpusops baseimage                       0
spack/centos-stream                                                                 2

解释说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。
    在选择镜像时尽量选择官方构建的镜像,其他镜像可能会存在安全隐患。

2、下载镜像

docker pull centos
# 不知道tag时,默认拉取最新版本。
# tag 相当于版本号
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

## 解释:
library:代表官方仓库的意思

3、查看镜像

docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   2 years ago   231MB

参数解释:

  • REPOSITORY:镜像名称
  • TAG:相当于软件版本
  • IMAGE ID:镜像ID,镜像的唯一标识
  • CREATED:镜像构建时间
  • SIZE:镜像大小

4、把镜像做成离线包/解压离线包

# 压缩成离线包
[root@master ~]# docker save -o centos.tar.gz centos
[root@master ~]# ls
anaconda-ks.cfg  centos.tar.gz

# 删除
[root@master ~]# docker rmi centos:latest
Untagged: centos:latest
Untagged: centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Deleted: sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6
Deleted: sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59
# 此时已经没有镜像了
[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE


# 解压离线包
[root@master ~]# docker load -i centos.tar.gz
74ddd0ec08fa: Loading layer  238.6MB/238.6MB
Loaded image: centos:latest
# 镜像就有了
[root@master ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    5d0da3dc9764   2 years ago   231MB
[root@master ~]#

5、删除镜像

docker rmi centos:latest
docker rmi 5d0da3dc9764 
docker rmi -f 5d0da3dc9764 
# rmi 后面的参数可以是 镜像名称:TAG ,也可以是 IMAGE ID
# -f:强制执行

1.2 容器相关操作

1、以交互式方式启动并进入容器

[root@master ~]# docker run --name test -it centos:latest /bin/bash
[root@721baa423e43 /]#

# 此时查看正在运行的容器可以看懂
 [root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED              STATUS              PORTS     NAMES
721baa423e43   centos:latest   "/bin/bash"   About a minute ago   Up About a minute             test
[root@master ~]#
  
# 输入exit,退出容器,退出之后容器也会停止,不会再前台运行
[root@master ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@master ~]#


# 解释:
docker run运行并创建容器
--name 容器的名字
-i 交互式
-t 分配伪终端
centos: 启动docker需要的镜像
/bin/bash说明你的shell类型为bash,bash shell是最常用的一种shell, 是大多数Linux发行版默认的shell。 此外还有C shell等其它shell。

2、以守护进程方式启动容器

[root@master ~]# docker run --name test1 -td centos:latest /bin/bash
014b1b3ae7a351f3d20c662b06c9b5078d01aa302a3b0f4a63fd3a127b748e50
[root@master ~]#
# -d在后台运行docker

## 此时查看容器还在运行
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   59 seconds ago   Up 58 seconds             test1
[root@master ~]#


# 进入容器
[root@master ~]# docker exec -it test1 /bin/bash
[root@014b1b3ae7a3 /]# exit
exit
# 退出之后容器还在后台运行
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   2 minutes ago   Up 2 minutes             test1
[root@master ~]#

3、查看容器

# 查看正在运行的容器
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   4 minutes ago   Up 4 minutes             test1
[root@master ~]#
# 输出内容解释:
CONTAINER ID:容器ID
IMAGE:该容器所使用的镜像
COMMAND:容器执行的命令
CREATED:容器创建时间
STATUS:容器的状态
PORTS:暴露端口
NAMES:容器名称

# 这里介绍一个参数:--no-trunc,显示 容器ID、执行的命令等详细信息
[root@master ~]# docker ps --no-trunc
CONTAINER ID                                                       IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
014b1b3ae7a351f3d20c662b06c9b5078d01aa302a3b0f4a63fd3a127b748e50   centos:latest   "/bin/bash"   8 minutes ago   Up 8 minutes             test1
[root@master ~]#




# 查看所有容器:包括运行和没有运行的容器
[root@master ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS                     PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   5 minutes ago   Up 5 minutes                         test1
721baa423e43   centos:latest   "/bin/bash"   9 minutes ago   Exited (0) 7 minutes ago             test
[root@master ~]#

4、停止容器

[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   9 minutes ago   Up 9 minutes             test1
[root@master ~]# docker stop  test1
test1
[root@master ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@master ~]#

5、启动已经停止的容器

[root@master ~]# docker start test1
test1
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS         PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   10 minutes ago   Up 2 seconds             test1
[root@master ~]#

6、删除容器

docker rm test
# 注意:docker rm 只能删除停止运行的容器。如果想要删除正在运行的容器则会报错:Error response from daemon: cannot remove container "/test1": container is running: stop the container before removing or force remove

# 如果想要删除正在运行的容器,则需要加 -f 选项
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS         PORTS     NAMES
014b1b3ae7a3   centos:latest   "/bin/bash"   12 minutes ago   Up 2 minutes             test1
[root@master ~]# docker rm -f test1
test1
[root@master ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@master ~]#

7、进入容器

docker exec -it test /bin/bash
# 注意:有时候镜像不支持 /bin/bash 这种shell。可以换成其他的shell,比如 /bin/sh 等。
# 进入容器后退出,使用 exit 命令

[root@master ~]# docker start test
test
[root@master ~]# docker exec -it test /bin/bash
[root@721baa423e43 /]# exit
exit
[root@master ~]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED          STATUS          PORTS     NAMES
721baa423e43   centos:latest   "/bin/bash"   20 minutes ago   Up 16 seconds             test
[root@master ~]#

8、查看容器日志

# 查看所有日志
docker logs test

# 查看最后保存的20行的内容
docker logs -n 20 test

# 实时刷新,页面总是显示20行内容
docker logs -f -n 20 test

9、查看帮助信息

# 查看docker命令的帮助信息
docker --help

# 查看某个选项的帮助信息
docker logs --help

1.3 通过 docker 部署 nginx 服务

1、启动容器

docker run -itd --name nginx -p 80 centos

### 参数解释
-p:把容器端口随机在物理机随机映射一个端口
--name:容器名称
-t:终端
-d:后台运行容器并输出容器id
-i:即使未连接也保持标准输入(STDIN)开启

2、在容器中安装nginx

# 查看
root@con02:~# docker ps |grep nginx
3e45f4fc0c3b   centos                     "/bin/bash"              4 minutes ago   Up 3 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp                                                                                                               nginx

# 进入容器
root@con02:~# docker exec -it nginx /bin/bash
# 可以看到容器的IP为172.17.0.3
[root@3e45f4fc0c3b /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever


##### 使用yum 安装 nginx
# 把镜像中的yum源换成阿里源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum update
yum install wget -y
yum install nginx -y
# 大部分镜像都是最小化安装系统,所以需要安装文本编辑器 vim
yum install vim-enhanced -y

# 以下操作和直接操作nginx就是一样的了
# 创建静态页面
mkdir /var/www/html -p
cd /var/www/html/
cat > index.html << EOF
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,this is a test page !!!</h1>
</body>
</html>

EOF


# 修改 nginx 配置文件中的 root 路径,如下
vim /etc/nginx/nginx.conf
root /var/www/html/;

# 启动 nginx
/usr/sbin/nginx

# 安装net-tools
yum -y install net-tools
# 查看正常启动
netstat -antp
#### 以下是输出内容
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      157/nginx: master p
tcp        0      0 172.17.0.3:40666        116.211.220.239:80      TIME_WAIT   -
tcp6       0      0 :::80    

# 退出容器
exit

在这里插入图片描述

3、查看

docker ps
######### 此时在查看 nginx 容器,端口80映射到32768端口上
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                 NAMES
3e45f4fc0c3b   centos                     "/bin/bash"              17 minutes ago   Up 17 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp                                                                                                               nginx


netstat -atnp |grep 32768

###### 我们的虚拟机上也存在这个端口
tcp        0      0 0.0.0.0:32768           0.0.0.0:*               LISTEN      15092/docker-proxy
tcp6       0      0 :::32768                :::*                    LISTEN      15100/docker-proxy


#
curl 192.168.92.10:32768
###### 
<html>
<head>
<title>nginx in docker</title>
</head>
<body>
<h1>hello,this is a test page !!!</h1>
</body>
</html>


# 也可以直接访问容器的 ip:port
# 注意:这种方式只能在和容器相同的服务器上进行访问,如果是其他服务器访问,必须要使用 虚拟机ip:虚拟机映射端口  的方式
curl 172.17.0.3:80

web 页面也可以访问
在这里插入图片描述
流量走向:
访问物理节点 ip:port(容器在物理节点映射的端口)→ 容器 ip:port(容器里部署的服务的端口)→ 就可以访问到容器里部署的应用了

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Server 可观测最佳实践

SQL Server 简介 SQL Server 是微软公司开发的一款关系数据库管理系统&#xff0c;支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台&#xff0c;而无论是物理还是虚拟形式&#xff0c;自建部署环境还是在云环境中&#xff0c;运行的操作系…

PyEcharts | 认识图形--饼图和玫瑰图

饼图和玫瑰图 饼图玫瑰图rosetype 参数 饼图 from pyecharts.charts import Pie import pyecharts.options as optsfrom pyecharts.globals import CurrentConfig,NotebookType CurrentConfig.NOTEBOOK_TYPE NotebookType.JUPYTER_LAB CurrentConfig.ONLINE_HOST OnlineHos…

ros与mqtt相互转换

vda5050 VDA5050协议介绍 和 详细翻译-CSDN博客 ros与mqtt相互转换 如何转换的&#xff0c;通过某个中转包&#xff0c;获取ros的消息然后以需要的格式转换为mqtt 需要的参数 ros相关 parameters[ (ros_subscriber_type, vda5050_msgs/NodeState), (ros_subscriber_queue…

这几款AI搜索产品,你用过几个?

AI搜索产品逐步走进普通大众的视野&#xff0c;当然也会有更多的产品进入市场供大家选择。 以下是一些常见的 AI 搜索产品&#xff1a; 综合型 AI 搜索平台&#xff1a; Perplexity&#xff1a;海外较受欢迎的 AI 搜索引擎&#xff0c;拥有百万用户。它利用 GPT、Claude、Llam…

[代码随想录打卡 Day3] 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表

(ง •_•)ง今天出去玩了&#xff0c;只刷完了视频&#xff0c;做了部分题&#xff0c;就是具体整理明天整理。希望坚持下去。啊啊啊啊啊啊啊啊啊啊啊 链表理论基础 基础的就是单链表。 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0…

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;1&#xff09; 读取图像、保存图像 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;2&#xff09;图像色彩操作 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;3&…

LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务

论文标题&#xff1a;How to Specialize Large Vision-Language Models to Data-Scarce VQA Tasks? Self-Train on Unlabeled Images! 作者&#xff1a;Zaid Khan, Vijay Kumar BG, Samuel Schulter, Xiang Yu, Yun Fu, Manmohan Chandraker 期刊&#xff1a;CVPR 2023 DOI…

产品思维笔记(一):打造用户喜爱的产品by Marty Cagan

全文摘要 《启示录&#xff1a;打造用户喜爱的产品》是由美国著名产品经理Marty Cagan所著&#xff0c;他曾经是eBay最出色的产品经理之一&#xff0c;也是Google X实验室的创始人之一。在这本书中&#xff0c;他分享了自己的经验和教训&#xff0c;帮助读者更好地理解如何打造…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中&#xff0c;TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别&#xff0c;以通俗易懂的方式进行解释&#xff1a; 1. 模型层数 OSI 模型&#xff1a;有 7 层&#…

Unity humanoid 模型头发动画失效问题

在上一篇【Unity实战笔记】第二十二 提到humanoid 模型会使原先的头发动画失效&#xff0c;如下图所示&#xff1a; 头发摆动的是generic模型和动画&#xff0c;不动的是humanoid模型和动画 一开始我是尝试过在模型Optimize Game objects手动添加缺失的头发骨骼的&#xff0c;奈…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中&#xff0c;性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化&#xff0c;如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…

Rust 力扣 - 189. 轮转数组

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们观察数组的性质&#xff0c;可以通过翻转原数组&#xff0c;然后在翻转前k个元素&#xff0c;最后翻转k个之后的元素&#xff0c;最终就转换成了原数组的轮转数组 题解代码 impl Solution {pub fn rotate(…

Kubernetes中的cm存储

华子目录 1.configmap1.1configmap功能1.2configmap应用场景1.3configmap的使用场景1.4configmap创建方式1.4.1键值对创建1.4.2通过文件创建1.4.3通过目录创建1.4.4通过yaml文件创建 1.5configmap的应用示例1.5.1使用cm填充环境变量1.5.2通过数据卷使用configmap1.5.3利用confi…

tauri开发中如果取消了默认的菜单项,复制黏贴撤销等功能也就没有了,解决办法

取消默认的菜单项&#xff1a;清除tauri默认的菜单项&#xff0c;让顶部的菜单menu不显示-CSDN博客 就是通过配置空菜单&#xff0c;让菜单不显示&#xff0c;但是这个引发的问题就是复制黏贴撤销等功能也就没有了&#xff0c;解决办法&#xff1a; 新增加编辑下的子菜单&…

【SpringCloud详细教程】-01-一文了解微服务

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

Redis数据结构:List类型全面解析

文章目录 一、List数据类型1.1 简介1.2 应用场景1.3 底层结构 二、数据结构2.1 压缩列表ZipList2.2 双向链表LinkedList&#xff08;后续已废弃&#xff09;2.3 快速链表QuickList 三、List常见命令 一、List数据类型 1.1 简介 详细介绍&#xff1a;Redis五种数据类型、Strin…

kafka相关面试题

文章目录 什么是消息中间件&#xff1f;kafka 是什么&#xff1f;有什么作用&#xff1f;kafka 的架构是怎么样的&#xff1f;Kafka Replicas是怎么管理的&#xff1f;如何确定当前能读到哪一条消息&#xff1f;生产者发送消息有哪些模式&#xff1f;发送消息的分区策略有哪些&…

异步回调之Join

join:异步阻塞之闷葫芦 阻塞模式实现泡茶实例首先从基础的多线程join合并实验入手.join操作的原理是阻塞当前线程,直到待合并的目标线程执行完成. 线程的合并流程 Java中线程的合并流程是:假设线程A调用线程B的join()方法去合并B线程,那么线程A进入阻塞状态,直到线程B执行完…

光耦合器的关键作用和创新---腾恩科技

光耦合器或光隔离器已成为电路中必不可少的器件&#xff0c;它允许信号在无需直接电接触的情况下跨不同电压域传输。这种隔离能力对于保护低压元件免受高压电路的潜在损坏至关重要。本文将仔细研究光耦合器在当今技术中发挥的独特作用&#xff0c;并探讨其在各种应用中不断扩展…