Docker入门到精通教程

news2024/9/24 17:16:33

 Docker是什么

Docker是一个开源的应用容器引擎,它基于Go语言并遵从Apache2.0协议开源。容器技术是和我们的宿主机共享硬件资源及操作系统,实现资源的动态分配,在资源受到隔离的进程中运行应用程序及其依赖关系。

Docker可帮助更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。它的优点包括简化流程、避免选择恐惧症、节省开支等。

使用Docker可以将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。Docker目前是最流行的Linux容器解决方案。它的基本概念包括镜像(Image)、容器(Container)和仓库(Repository)。镜像是Docker运行容器的前提,仓库是存放镜像的场所。

Docker架构使用C/S结构,即客户端/服务器体系结构。其中,Docker daemon是一个运行在宿主机(DOCKER-HOST)的后台进程。

Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

Docker仓库

Docker仓库是用于存储Docker镜像并可以通过Docker pull命令下载的云环境。Docker仓库分为公有仓库和私有仓库,公有仓库包括Docker Hub等开放给用户使用并允许用户管理镜像的仓库,私有仓库则是由用户自行搭建的存放镜像的云环境。在Docker中使用仓库之前需要登录Docker Hub或其他仓库,登录后可以通过Docker search命令查找需要下载的镜像。

Docker镜像

Docker使用

1、查找镜像

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   按照给定条件进行筛选
      --format string   Pretty-print search using a Go template
      --limit int       限制查找个数,默认是25 (default 25)
      --no-trunc        Don't truncate output

如 docker search jenkins 

2、列出本地镜像

docker images 

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

3、启动容器

 docker run [OPTIONS] IMAGE [COMMAND] 
[OPTIONS]常用参数有:
-i:启动一个可交互的容器,并持续打开标准输入。
-t:使用终端关联到容器的标准输入输出上。
-d:将容器放置后台运行

docker run有非常多参数,可以使用--help查看

如docker run hello-world,如果本地没有该镜像,会从仓库查找并拉取

 

运行交互式的容器


我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash

 如图,run容器后,命令行显示了root@0123ce188bd8:/#,这个是容器内的命令行。

按Ctrl+D,可以退出容器。

启动容器(后台模式)


使用以下命令创建一个以进程方式运行的容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

参数-d,指定该容器运行方式为后台模式,返回的一串数字为容器ID,每个容器都有唯一的ID。
 

4、查看容器

docker ps

Usage:  docker ps [OPTIONS]

List containers

Options:
  -a, --all             显示所有容器包含已停止容器
  -f, --filter filter   根据给定条件过滤
      --format string  使用go模板打印容器
  -n, --last int        
  -l, --latest          显示最新创建的容器
      --no-trunc        不截断输出
  -q, --quiet           只显示容器ID
  -s, --size            展示所有文件大小

 

5、查看容器日志 

使用 docker logs 命令,查看容器内的标准输出,常用来排查程序运行出错原因。

runoob@runoob:~$ docker logs 2b1b7a428627

 6、停止容器

使用 docker stop 容器id 命令来停止容器:

会输出容器ID

7、重启容器

使用 docker start +容器ID 启动一个已停止的容器:

$ docker start b750bbbcfd88

8、进入容器

进入Docker容器的命令为:


docker exec -it <容器ID或名称> /bin/bash


或者使用简写形式:


docker exec -it <容器ID或名称> sh


docker exec -it 7752222e1e1 /bin/bash


该命令会在指定的容器中启动一个交互式终端,允许您在容器内执行命令。容器的ID或名称可以是任何正在运行的容器的标识符。进入容器后,您可以在容器内执行任意命令。

输入exit或者按ctrl+D退出容器

9、删除容器

删除容器使用 docker rm 命令

容器必须先停止再删除。

高阶使用方法

构建镜像

如果已有镜像不满足使用,我们可以创建自己的镜像,需要写Dockerfile文件。

Dockerfile是用来构建Docker镜像的构建文件,它是由一系列命令和参数构成的脚本。

创建一个文件命名为Dockerfile

# 指定基础镜像  
FROM ubuntu:latest  
  
# 设置工作目录  
WORKDIR /app  
  
# 将当前目录下的文件复制到容器的工作目录中  
COPY . /app  
  
# 安装Redis  
RUN apt-get update && \  
    apt-get install -y redis-server && \  
    apt-get clean  
  
# 设置容器启动命令  
CMD ["redis-server", "/etc/redis/redis.conf"]

Dockerfile中,我们首先指定了基于Ubuntu的最新版本的基础镜像。

WORKDIR 设置了容器的工作目录为/app,这里目录是指容器内的目录。并将当前目录(宿主机当前目录)的所有文件复制到该目录下。

通过apt-get命令安装Redis

设置容器的启动命令为redis-server /etc/redis/redis.conf,即启动Redis服务器并加载配置文件。

有了这个Dockerfile后,我们可以使用docker build命令来构建镜像:


docker build -t my-redis .


该命令将会在当前目录下构建一个名为my-redis的Redis镜像,其中“.`”表示当前目录。在构建过程中,Docker将会执行Dockerfile中的每一条指令,并输出相应的信息。最终将会生成一个名为my-redis的镜像,可以使用docker images命令来查看所有已安装的镜像。

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

edualiyun@edualiyun:~$ docker run -t -i ubuntu:15.10 /bin/bash 


在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit命令来退出这个容器。

此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器镜像。

edualiyun@edualiyun:~$ docker commit -m="has update" -a="edualiyun" e218edb10161 edualiyun/ubuntu:v2 sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8


各个参数说明:

-m:提交的描述信息

-a:指定镜像作者

e218edb10161:容器

edualiday/ubuntu:v2:指定要创建的目标镜像名
 

docker使用实例

安装jenkins

docker pull jenkins 

docker run --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home --restart always -d jenkins/jenkins

它创建并启动了一个名为'jenkins'的Docker容器。参数的解释:

  • 'docker run': Docker的一个命令,用于从Docker镜像创建容器并启动它。
  • '--name jenkins': 给创建的容器命名为'jenkins'。
  • '-p 8080:8080': 端口映射[宿主机端口:容器端口],将容器内部的8080端口映射到宿主机器的8080端口。
  • '-p 50000:50000': 另一组端口映射,将容器内部的50000端口映射到宿主机器的50000端口。
  • '-v jenkins_home:/var/jenkins_home': 数据卷映射,将宿主机上的'jenkins_home'目录映射到容器内的'/var/jenkins_home'目录。
  • '--restart always': 设置容器的重启策略为'always',即无论容器是启动还是停止,都会在退出后自动重启。
  • '-d jenkins/jenkins': -d容器放置后台运行,使用'jenkins/jenkins'这个Docker镜像来创建并启动容器。

安装nginx

Docker 安装 Nginx-CSDN博客

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

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

相关文章

Redis实现附近商户

GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xf…

【广州华锐互动】VR石油钻井井控实训系统

在过去的几十年中&#xff0c;石油工业的发展速度一直在加快。为了适应这个快速发展的行业&#xff0c;需要新的技术和工具&#xff0c;而VR&#xff08;虚拟现实&#xff09;技术正是其中之一。本文将探讨VR石油钻井井控实训系统在石油工业教育中的应用。 在真实的钻井环境中&…

接口管理神器Apipost

自诞生以来&#xff0c;Apipost凭借其简洁直观的用户界面、强大的功能以及简单、易上手的操作&#xff0c;让Apipost成为了开发人员不可或缺的工具。本文将详细介绍Apipost的主要功能和使用方法&#xff0c;帮助大家更好地了解这款优秀的API开发工具。 下载安装 直接进入Apip…

Stable Diffusion WebUI扩展a1111-sd-webui-tagcomplete之Booru风格Tag自动补全功能详细介绍

安装地址 直接附上地址先: Ranting8323 / A1111 Sd Webui Tagcomplete GitCodeGitCode——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlabhttps://gitcode.net/ranting8323/a1111-sd-webui-tagcomplete.git上面是GitCode的地址,下面是GitHub的地址,根据自身情…

个人微信CRM客户管理系统怎么选?功能介绍

现在市面上有许多种类的个人微信CRM客户管理系统可供选择&#xff0c;因此&#xff0c;我们需要选择最适合自己需求的微信管理系统CRM&#xff0c;最重要的是根据您的需求和期望的功能来进行筛选。 如何选择适合自己的微信CRM客户管理系统&#xff1f; 现在市面上的系统五花八…

Cloud Studio连接MySQL,Access denied for一系列问题

官方文档有写如何安装Mysql $ apt update $ apt install mysql-server mysql-client -y$ service mysql start mysql -uroot -p123456进入MySQL命令行 问题出在连接数据库这一步&#xff0c;命令行能进去&#xff0c;但是数据库插件和代码都连不上 Access denied for 大概率…

基于SSM的外卖点餐系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是…

python实现列表倒叙打印

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 def func(listNode):listNode.reverse()for i in listNode:print(i)li [1,2,3,4,5] func(li)利用python列表函数reverse&#xff08;&#xff09;将列表倒叙&#xff0c;然后遍历打印&#xff0c;但是这有一个缺点就是改变了…

固态硬盘的日常注意事项

固态硬盘是一种高速、低功耗、无噪音、抗震动的存储设备&#xff0c;但是在使用过程中也需要注意以下几点&#xff1a; 避免频繁重复写入同一块区域&#xff0c;这会缩短固态硬盘的使用寿命。定期清理垃圾文件和临时文件&#xff0c;以免占用过多的存储空间。避免在固态硬盘上…

RISC-V架构——物理内存属性和物理内存保护

1、物理内存属性&#xff08;PMA&#xff1a;Physical Memory Attributes&#xff09; &#xff08;1&#xff09;系统内存映射包含各种不同属性的地址空间范围&#xff0c;每个地址空间范围支持的操作不一样&#xff1b; &#xff08;2&#xff09;物理内存属性一般是在芯片设…

使用IDEA2022.1创建Maven工程出现卡死问题

使用IDEA创建Maven工程出现卡死问题&#xff0c;这个是一个bug 这里是别人和官方提供这个bug,大家可以参考一下 话不多说&#xff0c;上教程 解决方案&#xff1a; 方案1&#xff1a;更新idea版本 方案2&#xff1a;关闭工程&#xff0c;再新建&#xff0c;看图

开源设计和原型平台 Penpot:跨领域团队的愉快体验 | 开源日报 No.59

penpot/penpot Stars: 23.8k License: MPL-2.0 Penpot 是第一个面向跨领域团队的开源设计和原型平台。它不依赖于操作系统&#xff0c;基于 Web&#xff0c;并使用开放标准 (SVG)。 为跨领域团队而生&#xff1a;专注于设计和代码团队&#xff0c;提供无需频繁交接工作的愉快…

数字图像处理实验记录三(双线性插值和最邻近插值)

前言&#xff1a;个人实验记录&#xff0c;仅供学习参考&#xff0c;实验报告别用我图 文章目录 一、基础知识1&#xff0c;为什么要进行插值&#xff1a;2&#xff0c;双线性插值原理&#xff1a;3&#xff0c;最邻近插值&#xff1a; 二、实验要求&#xff1a;1&#xff0e;…

215. 破译密码 - mobius函数 + 整数分块

215. 破译密码 - AcWing题库 mobius函数&#xff1a; 一个数的分解质因数形式&#xff0c;某一个指数>1为0&#xff0c;质因数为奇数个为-1&#xff0c;偶数个为1 mobius函数可以与容斥结合起来&#xff0c;比如mobius[2] -1, mobius[3] -1, mobius[2 * 3] 1。对应容斥…

硬件系统工程师宝典(44)-----差分信号走线“相位失配”怎么破?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到了PCB在布局时除了要满足结构需求&#xff0c;还要考虑模块划分、特殊器件的布局以及散热问题。今天来说说高速PCB布线的一些注意事项…

2023服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…

【Docker】Docker里面安装win系统

前端时间还早想着在win上面安装DokerDesktop&#xff0c;处理暂用【Docker】Docker Desktop更换非C盘符(减轻占用率)&#xff0c;这次心想可否反过来呢&#xff1f;就是想在&#xff1a;Docker里面安装win系统 docker pull microsoft/windowsservercoredocker create --name …

Apriori(关联规则挖掘算法)

关联规则分析 事务库 上表所示的购物篮数据即是一个事务库&#xff0c;该事务库记录的是用户行为的数据。 事务 上表事务库中的每一条记录被称为一笔事务。在购物篮事务中&#xff0c;每一次购物行为即为一笔事务&#xff0c;例如第一行数据“用户1购买商品A,B,C”即为一条事…

【MATLAB源码-第51期】基于matlab的粒子群算法(PSO)的栅格地图路径规划。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都会…

完美解决 在将最终稿件上传到 IEEE PDF eXpress进行格式检查是出现“font not embedded“的问题 (不会出现自动压缩图像的现象)

最近中了一篇IEEE的论文&#xff0c;在校稿阶段&#xff0c;final paper是需要通过IEEE PDF eXpress网站的格式检查&#xff0c;然后出现一下问题&#xff1a; Errors: Font TimesNewRomanPS-BoldMT, TimesNewRomanPS-ItalicMT, TimesNewRomanPSMT is not embedded 用人话说就…