docker简易入门(极简,纯干货)

news2024/11/23 9:20:32

简介

Docker是一种容器化平台,它可以用来轻松地创建、部署和运行应用程序和服务。Docker使用容器技术来管理应用程序的运行环境,它将应用程序和服务打包到一个易于移植的容器中,然后在任何地方运行这个容器,无需担心不同环境之间的差异。使用Docker,您可以轻松地构建、测试、部署和扩展应用程序,从而大大提高了开发和部署的效率。Docker的核心是Docker引擎,它是一个轻量级的运行时环境,可以在任何操作系统上运行。Docker还提供了一系列命令行工具和API,使开发人员和系统管理员可以轻松地管理Docker容器和镜像。

核心

Docker的核心是Docker引擎(Docker Engine),它是一个开源的容器化技术,能够简化应用程序的开发、部署和管理。

Docker Engine包括以下几个核心组件:

1. Docker守护进程(Docker daemon):Docker守护进程是运行在主机上的长期运行的进程,用于管理Docker容器、镜像、网络、数据卷等资源。

2. Docker客户端(Docker client): Docker客户端是Docker命令行工具,用于与Docker守护进程进行通信,同时也是用户与Docker交互的主要方式。

3. Docker镜像(Docker image): Docker镜像是一个只读的模板,它包含了用于创建Docker容器的文件系统和应用程序。

4. Docker容器(Docker container): Docker容器是由Docker镜像创建的运行实例,可以运行应用程序及其依赖项,同时具有隔离和可移植性。

5. Docker仓库(Docker registry): Docker仓库是用于存储Docker镜像的中央存储库,可以是公共的或私有的,用户可以从中拉取Docker镜像来创建和运行容器。

以上组件结合在一起就形成了Docker的整体架构,帮助用户快速、高效地构建、发布和管理软件应用程序。

实战

docker安装

linux自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

或者

curl -sSL https://get.daocloud.io/docker | sh

或者通过宝塔控制面板

......

linux离线安装

离线安装包下载

Index of linux/static/stable/x86_64/

你可以先找一个顺眼些的包下载(结合实际情况,不建议使用最新版本,相对不稳定)

可以直接下载到你本地电脑再上传到测试机,也可以直接在你的测试机上下载

wget https://download.docker.com/linux/static/stable/x86_64/docker-17.12.1-ce.tgz  

解压

tar -zxvf docker-17.12.1-ce.tgz

cp docker/* /usr/bin/

cd /etc/systemd/system/

vi docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
  
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
  
[Install]
WantedBy=multi-user.target

保存并退出:wq

然后授权

chmod +x /etc/systemd/system/docker.service
# 重新加载配置文件(每次有修改docker.service文件时都要重新加载下)
systemctl daemon-reload
# 启动
systemctl start docker
# 设置开机启动
systemctl enable docker.service

 如果出现意外情况,请自行百度吧,很多情况就不说了哈,这里只讲成功的情况

控制面板

当然有很多这个控制面板,我这里就直接选择了SimpleDocker,当然你也可以忽略直接使用命令

 docker pull registry.cn-hangzhou.aliyuncs.com/seven-tao/simple-docker:0.0.7.1

创建一个进入某个文件夹创建docker-compose.yaml

然后编辑

version: '3'
services:
  redis:
    image: redis:latest
    restart: always
  web:
    image: registry.cn-hangzhou.aliyuncs.com/seven-tao/simple-docker:0.0.7.1
    restart: always
    ports:
      - "9091:4050"
    volumes:
      - /tmp/simple-docker/back:/tmp/back
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - redis

然后在该文件所在文件夹执行

docker compose up -d

 我这里有很多,你们先忽略哈哈,你们应该只有最后两条

docker常见命令

pull拉取镜像
push推送镜像

search查询镜像

run创建并运行
start/stop/restart启动已被停止的容器/停止容器/重启
kill杀死运行中的某个进程
rm删除一个或多个容器
rmi删除一个或多个镜像
pause暂停容器中的所有进程
unpause恢复所有进程
create创建一个信容器但不启动
exec容器中执行
images镜像
ps列出运行中的容器
stop停止
inspect查看容器或镜像的详细信息。
build使用Dockerfile文件构建一个新的Docker镜像。
docker-compose使用docker-compose.yml文件管理多个容器的运行和停止

 以上就是比较常见的命令了,相对不常见我就不列出来了

配置加速器

linux

/etc/docker/daemon.json

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

找到你的docker安装目录进入\.docker,我这里装的是docker desktop

它不让选择地址,默认就是我的C:\Users\Administrator\.docker这个位置

编辑它就对了

我这里地址不一样哈

例子

安装软件

docker ps

可以看到我现在没有运行中的容易,好的

那我加一个容器

就拿redis来做例子吧

可以看到仓库中存在这些redis镜像

你可以选择某一个镜像进行下载,可以拉取

docker pull ~~~~~~~

我这里就直接一点直接运行

docker run -d -p 6379:6379 --name redis redis:latest

 可以看到redis直接给跑起来了,实际上你直接用docker run  它会检测你本地存不存在这个镜像,不存在它会pull拉取到你所指定的版本,存在就直接创建容器运行

目录挂载
volume挂载数据卷

我创建了一个为redis的数据卷

然后查询了这个数据卷的信息

docker run -d -p 6379:6379 --name redis-2 -v redis:/data redis:latest --appendonly yes --requirepass zkb.com

然后用可视化工具连接这个redis试试

可以看到连接成功,但是没有什么数据,数据卷里面肯定也是空的,那我们造点数据

docker exec -it redis-2 bash

redis-cli

auth zkb.com

set zxs 123456

get zxs

bind mount挂载主机目录

可以看到我们的宿主机是window操作系统

我在宿主机里面创建了  conf与data两个文件夹

conf里面创建了redis.conf配置文件

这个配置你们可以使用默认的也可以根据自己的实际情况配置

docker run -p 6379:6379 --name redis -v /E/docker/redis/conf:/etc/redis/redis.conf  -v /E/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

这样我们的宿主机挂载就成功了

这里主要说明一下,如果宿主机挂载的宿主机为window则需要把 你的盘符修改为   /你的盘名/~~

例如我挂载的目录在E盘   那么我的挂载路径应为

/E/docker/redis/conf:/etc/redis/redis.conf  -v /E/docker/redis/data:/data

 我们经常download别人工程是不是总是看到别人带了一个Dockerfile文件,是不是不明白它是干嘛的,别着急我来说说

 我这边就随便写个访问计数吧

然后我这个demo需要发布到docker里面,怎么搞

创建Dockerfile
# 设置基础镜像
FROM adoptopenjdk/openjdk11

# 将JAR文件添加到镜像中
ADD target/demo1-0.0.1-SNAPSHOT.jar demo.jar

# 定义容器启动命令
ENTRYPOINT ["java", "-jar", "/demo.jar"]

这边我就在本地pack了,那怎么执行这个Dockerfile呢

创建镜像
docker build -t demo-image .

 注意最后面的 “ .”  这个是不能忽略的

 

 已经做成镜像放到docker里面了哈

执行
docker run -d -p 6333:6333 demo-image

测试

已经ok了,当然我这里写的是最简单的Dockerfile

Docker-compose

当我们有多个服务,依赖又非常多,那么我们需要把这些服务聚合到一起,就需要写一个

docker-compose.yml

就如之前我们的控制面板,依赖了redis。。。。,那我们要把它集合到一起,就写了一个docker-compose.yml,当然也可以分开,你得提前做好容器直接的通讯,我这里只做例子

制作docker-compose.yml
version: '3'
services:
  redis:
    image: redis:latest
    restart: always
  web:
    image: registry.cn-hangzhou.aliyuncs.com/seven-tao/simple-docker:0.0.7.1
    restart: always
    ports:
      - "9091:4050"
    volumes:
      - /tmp/simple-docker/back:/tmp/back
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - redis
执行docker-compose.yml
docker compose up -d

容器间通讯

都知道docker容器直接都是互相隔离的,应此容器之间无法ping信息,那么这些容器之间维护一套网络模式,是不是可以通讯呢

创建网络

docker network create zxs-net
docker run -d --name redis --network zxs-net --network-alias redis redis:latest

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

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

相关文章

动作捕捉系统通过VRPN与ROS系统通信

NOKOV度量动作捕捉系统支持通过VRPN与机器人操作系统ROS通信,进行动作捕捉数据的传输。 一、加载数据 打开形影动捕软件,加载一段后处理数据。 这里选择一段小车飞机的同步数据。在这段数据里面,场景下包含两个刚体,分别是小车和…

基于注解的声明式事务

1.什么是事务 数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。 2.事务的特性 A:原子性(A…

互联网Java工程师面试题·微服务篇·第一弹

目录 ​编辑 1、您对微服务有何了解? 2、微服务架构有哪些优势? 3、微服务有哪些特点? 4、设计微服务的最佳实践是什么? 5、微服务架构如何运作? 6、微服务架构的优缺点是什么? 7、单片&#xff0c…

【MySQL】事务(上)

文章目录 事务概念什么是事务?为什么要有事务?事务的版本支持事务的提交方式事务常见操作方式基本操作 事务概念 mysql 本身内部采用 多线程的方式,来实现数据存储 相关的工作 就注定对数据 有并发访问的场景 为了解决这类问题,就…

RestCloud AppLink已支持的数据源有哪些?

RestCloud AppLink是什么? 首先,我们需要了解RestCloud AppLink是什么,AppLink是一款由RestCloud公司推出的超级应用连接器。不需要开发,零代码,低成本即可快速打通数百款应用之间的数据。通过流程搭建,可…

【ATTCK】MITRE Caldera 简介

一、什么是Caldera caldera是一个基于MITRE ATT&CK™构建的网络安全框架。其目标是创建一种工具,通过提供自动化安全评估来增强网络从业者的能力,从而节省用户的时间、金钱和精力。为此,需要几个关键组件才能使 Caldera 成为行业领先的平…

在Gradio实现两个下拉框进行联动案例解读:change/click/input实践(三)

本文的代码来自ChuanhuChatGPT,通过拆解写得比较好的gradio项目,可以更快理解gradio的一些使用。 ChuanhuChatGPT整体页面效果是比较合理的: 1 下拉框联动效果的解读 本篇是将一个其中【对话】中的【Prompt加载】小模块抽取出来并稍稍修改…

电商平台api接口,淘宝/天猫、1688、拼多多、亚马逊等电商数据平台api接口演示案例

API简单来说是一种数据的传输方式,使用已经开发好的API接口可以缩短项目时间,减少开发成本。 比如说数据宝平台提供的实名认证API接口,像这种实名认证类的API接口是无法自行开发的,如果自行对接部委,能否成功不说&…

【已解决】vscode 配置C51和MDK环境配置

使用命令 gcc -v -E -x c - 看自己gcc 有没有安装好 也可以在自己的vscode中新建一个终端 gcc -v g -v 首先把自己的C51 和MDK 路径 设置好 vscode 中设置 C51 和 MDK 的路径 这是你keil 中写 51单片机和 STM32 的 如果你出现什么include 的什么波浪线,那估计…

力扣511. 游戏玩法分析 I

答案: select player_id,min(event_date) as first_login from Activity a group by player_id我最开始写的错误答案是这样的: select player_id,event_date as first_login from Activity a group by player_id having event_date min(event_date…

一篇揭秘Linux高性能服务epoll 的本质

导语 epoll接口是为解决Linux内核处理大量文件描述符而提出的方案。该接口属于Linux下多路I/O复用接口中select/poll的增强。其经常应用于Linux下高并发服务型程序,特别是在大量并发连接中只有少部分连接处于活跃下的情况 (通常是这种情况),在该情况下能…

copilot 产生 python工具函数并生成单元测试

stock.py 这个文件,我只写了注释(的开头),大部分注释内容和函数都是copilot # split a string and extract the environment variable from it # input can be , pathabc, pathabc;pathdef, pathabc;pathdef;pathghi # output i…

快速拉取聚水潭单据的ETL工具

聚水潭介绍 聚水潭平台则是国内较为出名的电商ERP平台,为企业提供了便捷的销售和管理服务,专注于提高交易效率,但是如何将数据快速同步到其他系统一直是很多企业的痛点。 ETLCloud数据集成平台提供了丰富的数据分析工具和算法模型&#xff…

Oracle 账户被锁:the account is locked 解决方法

Oracle 账户被锁:the account is locked 解决方法 连接Oracle数据库时报错账户已锁定错误 解决方法一:命令行模式: 步骤一: WinR打开命令行输入:sqlplus 使用system或sys账户以管理员身份登录,口令即安装…

MySQL如何查找删除重复行?

如何查找重复行 第一步是定义什么样的行才是重复行。多数情况下很简单:它们某几列具有相同的值。本例采用这种定义,或许你对“重复”的定义得很复杂,你需要对sql做些修改。本例要用到的数据样本: create table test(id int not …

学用 DevChat 的 VSCode 插件,体验AI智能编程工具 (一)

简单说DevChat是一个辅助编程的智能工具,它可以通过自然语言对话的方式与开发者进行交流,帮助开发者更高效地完成编程任务。 有了人工智能工具,编程进入一个新天地。 闻名已久,不若体验一下。 一.准备工作 1.运行环境. A. p…

MS512非接触式读卡器 IC

MS512 是一款应用于 13.56MHz 非接触式通信中的高集 成度读写卡芯片。它利用了先进的调制和解调技术,完全集 成了在 13.56MHz 下的各种非接触式通信方式和协议。 主要特点  高度集成的解调和解码模拟电路  采用少量外部器件,即可将输出驱动级接…

如何使用群晖虚拟机部署本地网页文件实现公网远程访问?

文章目录 前言1. 安装网页运行环境1.1 安装php1.2 安装webstation 2. 下载网页源码文件2.1 访问网站地址并下载压缩包2.2 解压并上传至群辉NAS 3. 配置webstation3.1 配置网页服务3.2 配置网络门户 4. 局域网访问静态网页配置成功5. 使用cpolar发布静态网页,实现公网…

本地PHP搭建简单Imagewheel私人云图床,在外远程访问——“cpolar内网穿透”

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…