Docker | 基础指令

server/2024/11/14 6:25:56/

环境:centos8

参考:

安装 Docker | Docker 从入门到实践icon-default.png?t=N7T8https://vuepress.mirror.docker-practice.com/install/

安装Docker

卸载旧版本,安装依赖包,添加yum软件源,更新 yum 软件源缓存,安装 docker-ce,启动docker,防火墙放行

 添加镜像加速,在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}

 镜像、容器、仓库

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

镜像(Image)和容器Container)的关系,就像是面向对象程序设计中的  和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间 (opens new window)。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。

一个 Docker Registry 中可以包含多个 仓库Repository);每个仓库可以包含多个 标签Tag);每个标签对应一个镜像。

基础命令

镜像:

获取镜像

 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

 例:docker pull ubuntu:18.04

列出镜像

docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
redis                latest              5f515359c7f8        5 days ago          183 MB
nginx                latest              05a60462f8ba        5 days ago          181 MB

 删除本地镜像

docker image rm [选项] <镜像1> [<镜像2> ...]

容器: 

运行一个容器

 docker run [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 

例:docker run -itd ubuntu:18.04  bash   //进入bash终端 ,-d 后台运行

终止容器/重启

docker container stop/restart

查看容器

docker container ls -a

进入容器

docker attach 命令或 docker exec 命令

区别: attach 命令下的exit,会导致容器的停止;exec的不会

docker attach 243c
docker exec -i 69d1 bash

注:只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

导入导出容器

docker export 7691a814370e > ubuntu.tar
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器

使用 docker container rm 来删除一个处于终止状态的容器

docker container rm trusting_newton

 清理所有处于终止状态的容器

docker container prune

commit

当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
docker commit \--author "Tao Wang <twang2218@gmail.com>" \--message "修改了默认网页" \webserver \nginx:v2

使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为 黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作。

Docker export和docker commit的区别:

Docker export:Export a container's filesystem as a tar archive 保存文件系统快照

Docker commit:Create a new image from a container's changes 根据变更生成新镜像

使用 Dockerfile 定制镜像

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

案例:

使用Dockerfile构建镜像:

docker1:

基于nginx的基础镜像,修改网站根目录为/webdir

使用RUN命令修改主页index.html的内容为index

使用COPY命令添加页面page1.html和page2.html,内容分别为page1和page2

构建镜像名为nginx-test:v1,构建完镜像后,将镜像发送到docker2

docker pull nginx
mkdir /nginxdir
cd /nginxdir/
touch Dockerfile
echo "page1" > page1.html  
echo "page2" > page2.htmlvim Dockerfile FROM nginx  RUN mkdir -p /webdir && mv /usr/share/nginx/html/* /webdir/  RUN rm -rf /usr/share/nginx/html && ln -s /webdir /usr/share/nginx/html  RUN echo "index" > /webdir/index.html  COPY page1.html /webdir/  COPY page2.html /webdir/ 
docker build -t nginx-test:v1 .cd ~
docker save -o nginx-test_v1.tar nginx-test:v1
scp nginx-test_v1.tar root@192.168.68.134:/root/

docker2:

导入镜像,并运行容器,将nginx的80端口映射到docker2的82端口

设置防火墙默认区域为public

docker load -i nginx-test_v1.tarfirewall-cmd --permanent --add-port=82/tcp --zone=public 
firewall-cmd --reloaddocker run -d --name my-nginx -p 82:80 nginx-test:v1

验证效果:

docker1:

Curl docker2ip:82--------àindex

Curl docker2ip:82/page1.html--------àpage1

Curl docker2ip:82/page2.html--------àindex2

 从空白镜像创建Docker

http://t.csdnimg.cn/TORxbicon-default.png?t=N7T8http://t.csdnimg.cn/TORxb


http://www.ppmy.cn/server/43012.html

相关文章

H3CNE-6-ICMP数据包分析

ICMP&#xff1a;Internet Control Message Protocol ICMP用来传递差错、控制、查询等信息 Wireshark抓包 Wireshark下载国内镜像 ICMP数据包格式 Type&#xff1a;表示ICMP消息类型 Code&#xff1a;表示同一消息类型中的不同信息 ICMP消息类型和编码类型 ICMP应用 &…

如何在Ubuntu上安装NVIDIA显卡驱动并禁止自动更新

在Ubuntu上安装NVIDIA显卡驱动后&#xff0c;有时为了避免兼容性问题或驱动稳定性问题&#xff0c;可能需要禁止自动更新显卡驱动。本文将逐步介绍如何在Ubuntu上安装NVIDIA显卡驱动&#xff0c;并配置系统以禁止驱动的自动更新。 1. 准备工作 在开始之前&#xff0c;请确保你…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日&#xff0c;世界上第一位AI程序员Devin诞生&#xff0c;不仅能自主学习新技术&#xff0c;自己改Bug&#xff0c;甚至还能训练和微调自己的AI模型&#xff0c;表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快&#xff0c;人类的教育能否跟上“机器学习”的速…

云界洞见:移动云服务开启技术创新与问题解决的新篇章

一、什么是移动云 移动云以“央企保障、安全智慧、算网一体、属地服务”为品牌支撑&#xff0c;聚焦智能算力建设&#xff0c;打造一朵智能、智慧、安全可信可控的云&#xff0c;提供更优质的算力服务&#xff0c;引领云计算产业发展。 那么下面博主带领大家了解移动云的优势所…

RS8557XF功能和参数介绍及PDF资料

RS8557XF是一款单通道精密运算放大器&#xff0c;其主要特点包括高精度、低偏移电压、低输入偏置电流和低噪声。以下是该产品的部分参数和功能介绍&#xff1a; 增益带宽积 (GBW): 4.3 MHz&#xff0c;这使得该运放适用于较宽频率范围内的信号处理。 输入偏置电流: 650 μA&…

javas-core VS java-object-diff

对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers&#xff0c;都为同源对比&#xff0c;都支持嵌套对象。 使用JMH测试方法进行性能测试&#xff0c;使用题库的QuestionResponseVO对象来进行对照对比&#xff0c;进行…

Mycat+Mysql搭建数据集群实现数据分片存储

前言 MyCAT介绍 * 一个彻底开源的,面向企业应用开发的“大数据库集群”; * 支持事务、ACID、可以替代MySQL的加强版数据库; * 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群; * 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL; * 一个新颖…

GANs生成对抗网络的学习

1.GANs生成网络的定义 GANs是一种深度学习模型&#xff0c;用于生成新的数据实例&#xff0c;如图像、音频和文本。它主要由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。 2.生成器 生成器的目标是创造出…