简明docker快速入门并实践方法

简明docker快速入门并实践方法

  • 前言:
  • 1. 什么是Docker?
  • 2. Docker的基本概念
  • 3. 安装配置Docker
  • 4. Docker基本命令:
  • 5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像
    • 步骤 1:拉取Nginx镜像
      • 步骤 1.5(可选):运行Nginx容器以熟悉操作
    • 步骤 2:创建自定义Nginx配置文件
    • 步骤 3:创建Dockerfile
    • 步骤 4:构建Docker镜像
    • 步骤 5:运行Docker容器
    • 步骤 6(可选):登录Docker Hub并推送镜像
  • 6.补充内容
    • Docker网络的基本概念
    • Docker网络的基本命令

前言:

这是一篇简明docker快速入门并实践方法,目的是希望大家在半个小时内对docker快速了解并进行操作。故比较简洁(不过基本的使用方法都包含了),建议和那些更详细的知识帖结合起来看。

下面有两个视频,第一个视频看完可以对docker有基本的了解。第二个视频看完可以学会一些docker的实操操作。大家可以先看第一个视频后,再根据我下面分享的知识直接进行docker的实践操作:

  1. 改变软件行业的技术!程序员、软件爱好者必须掌握的Docker,到底是什么?
  2. 保姆级Docker入门教程:10分钟从零开始彻底掌握 Docker,0 基础到实战部署

1. 什么是Docker?

Docker是基于Linux容器技术的一种应用,它使得开发者能够将应用程序及其依赖打包成一个轻量级、可移植的容器。从而确保该应用能够在任何环境中一致地运行。相比传统的虚拟机技术,Docker更加高效和快速,因为它不包含整个操作系统,而是共享主机操作系统的内核。

2. Docker的基本概念

  1. 镜像(Image)
    • 用于创建容器的只读模板,包含运行某个应用所需的所有代码、库、配置文件等。
    • 使用docker pull <image_name>从Docker Hub拉取镜像。
  2. 容器(Container)
    • 镜像的运行实例。它可以被启动、开始、停止、删除,并且可以通过Docker命令行接口与之交互。
    • 使用docker run <image_name>启动容器
  3. 仓库(Repository)
    • 存储和分享Docker镜像的地方。分为公共仓库(如Docker Hub)和私有仓库。
    • 使用docker login登录Docker Hubdocker push <image_name>推送镜像。
  4. Dockerfile
    • Dockerfile定义了构建镜像的步骤,通过docker build -t <image_name> .命令创建镜像。
    • 示例:
    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y nginx
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]
    

3. 安装配置Docker

访问Docker官网下载适合的版本。对于Windows和macOS用户,推荐使用Docker Desktop,它集成了Docker引擎、Docker CLI客户端和其他实用工具。

  1. 安装Docker

    • 访问Docker官网,根据你的操作系统(WindowsmacOSLinux)下载并安装Docker DesktopDocker Engine
    • 安装过程中,可以参考这两个帖子:1. 2024最新 Windows系统安装docker教程,2. 在windows安装Docker到指定路径
    • 安装完成后,通过命令行(如WindowsPowerShellLinuxTerminal)运行docker --version检查安装是否成功。
  2. 基本配置

    • 登录Docker Hub(可选,用于拉取或推送镜像):docker login
    • 配置Docker以使用非默认设置(如代理、存储驱动等),可参考官方文档。

4. Docker基本命令:

  • 基本命令
    • docker --version:检查Docker是否正确安装及当前版本。
    • docker pull <image-name>:从Docker Hub下载指定的镜像。
    • docker images:列出本地所有的镜像。
    • docker run <image_name>:启动容器。
    • docker run -it --rm <image-name>:基于镜像启动一个新的容器,并进入其内部shell环境。
    • docker ps:显示正在运行的容器。
    • docker ps -a:查看所有容器(包括停止的)。
    • docker stop <container-id>:停止指定ID的容器。
    • docker rm <container_id>:删除指定ID的容器
    • docker tag <镜像名>:<标签> <仓库用户名>/<镜像名>:<标签> : 为自己设置的镜像添加标签
    • docker push <仓库用户名>/<镜像名>:<标签> 推送镜像到仓库

5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像

步骤 1:拉取Nginx镜像

首先,从Docker Hub拉取官方的Nginx镜像:

docker pull nginx:latest

确认镜像已成功拉取:

docker images

你应能在列表中看到名为nginx且标签为latest的镜像。

操作解释

  • docker pull 命令用于从Docker Hub或其他容器镜像仓库中拉取镜像。
  • nginx:latest 指定了要拉取的镜像名称和标签(这里是最新的稳定版)。
  • 使用 docker images 命令查看本地已有的镜像列表,确认nginx镜像是否已成功拉取。

步骤 1.5(可选):运行Nginx容器以熟悉操作

docker run -d -p 8080:80 --name my-test-nginx nginx:latest
  • -d 表示以守护进程模式运行容器。
  • -p 8080:80 将容器的80端口映射到主机的8080端口。
  • --name my-test-nginx 为容器指定一个名称。

现在,你可以在浏览器中访问 http://localhost:8080,应该会看到Nginx的默认欢迎页面。

注意:在继续下一步之前,你可以使用 docker stop my-test-nginx 停止这个容器,并使用 docker rm my-test-nginx 删除它(如果你不再需要它的话,不过这里不删)。

docker stop my-test-nginx
docker rm my-test-nginx

步骤 2:创建自定义Nginx配置文件

在创建自定义配置文件前,先了解Nginx默认配置的关键部分。Nginx的主配置文件通常位于/etc/nginx/nginx.conf,它定义了Nginx的工作方式、事件处理、HTTP服务器设置等。

现在,我们将创建一个自定义配置文件。首先,首先,创建一个新的目录用于存放你的Nginx配置文件和Dockerfile文件。例如,创建名为my-nginx-config的目录:

mkdir my-nginx-config
cd my-nginx-config

然后,在该目录中创建一个名为nginx.conf的文件,并添加以下内容:(这是一个简化的nginx.conf示例,它保留了Nginx的基本功能,并且容易理解)

user  nginx;
worker_processes  1;  # 对于简单实践,我们可以只使用一个工作进程error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;  # 每个worker进程的最大连接数
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;tcp_nopush     on;tcp_nodelay    on;keepalive_timeout  65;include /etc/nginx/conf.d/*.conf;  # 默认包含的配置文件目录,可以添加自定义配置# 定义一个简单的服务器块,用于测试server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 错误页面处理error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}
}

步骤 3:创建Dockerfile

在同一目录下(my-nginx-config),创建一个名为Dockerfile的文件,并添加以下内容:

# 使用官方的Nginx镜像作为基础镜像
FROM nginx:latest# 将当前目录下的nginx.conf文件复制到容器中的/etc/nginx/nginx.conf位置.
# 注意:这里假设Dockerfile和nginx.conf在同一目录下
COPY nginx.conf /etc/nginx/nginx.conf# 如果有其他配置文件或静态资源,也可在此处复制
# COPY default.conf /etc/nginx/conf.d/default.conf
# COPY html/ /usr/share/nginx/html/# 暴露80端口(Nginx默认端口)
EXPOSE 80# 启动Nginx服务,并保持在前台运行(daemon off)
CMD ["nginx", "-g", "daemon off;"]

解释

  • COPY nginx.conf /etc/nginx/nginx.conf:这条指令将本地(构建上下文)的nginx.conf文件复制到容器内的/etc/nginx/nginx.conf位置,替换掉容器默认的Nginx配置文件。
  • EXPOSE 80:这条指令告诉Docker,容器在运行时需要监听80端口(虽然这不是必需的,因为Nginx默认监听80端口,但声明一下是个好习惯)。
  • CMD ["nginx", "-g", "daemon off;"]:这条指令指定了容器启动时默认执行的命令。这里使用daemon off参数是为了让Nginx在前台运行,这样Docker容器就不会因为Nginx进入后台而立即退出。

步骤 4:构建Docker镜像

返回上一级目录(包含Dockerfilenginx.conf的目录),然后构建Docker镜像:

docker build -t my-custom-nginx .
  • 这将创建一个名为my-custom-nginx的Docker镜像。
  • -t选项用于为镜像指定标签,.表示当前目录为构建上下文。

步骤 5:运行Docker容器

使用刚刚构建的镜像运行容器:

docker run -d -p 8080:80 --name my-custom-nginx-container my-custom-nginx
  • 这将启动一个名为my-custom-nginx-container的容器,并将容器的80端口映射到主机的8080端口。
  • 访问http://localhost:8080,你将看到基于自定义配置的Nginx页面。

步骤 6(可选):登录Docker Hub并推送镜像

首先,登录Docker Hub:

docker login

然后,为镜像打标签(如果你的Docker Hub用户名是your-username):

docker tag my-custom-nginx your-username/my-custom-nginx

最后,推送镜像到Docker Hub

docker push your-username/my-custom-nginx

至此,你已经成功地创建了一个自定义的Nginx镜像,并将其推送到了Docker Hub

6.补充内容

Docker网络的基本概念

  • 网络(Networking)
    • Docker容器可以通过Docker网络相互通信,也可以与外部网络通信。Docker提供了多种网络模式,如bridge、host、overlay等。
  • 卷(Volumes)
    • Docker卷用于持久化数据,即使容器被删除,卷中的数据仍然保留。这有助于数据的备份、恢复和迁移。
  • Compose(docker-compose)
    • Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过docker-compose.yml文件,可以轻松地配置和管理多个容器的启动、停止和连接。

Docker网络的基本命令

  • docker network ls:列出所有Docker网络。
  • docker volume ls:列出所有Docker卷。
  • docker-compose up:根据docker-compose.yml文件启动所有服务。
  • docker-compose down:停止并移除由docker-compose.yml定义的所有容器、网络、卷和默认网络。

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

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

相关文章

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language&#xff08;PSL&#xff09; 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

左神算法基础提升--3

文章目录 Manacher 算法经典算法Manacher算法原理 单调栈或单调队列 Manacher 算法 经典算法 在每学习Manacher算法之前我们可能会使用一种比较经典暴力的算法&#xff1a;遍历str字符串&#xff0c;将字符串中的每个字符作为对称点&#xff0c;向两边扩散找到回文字段&#x…

【Docker】使用Dev Container进行开发

工作区 Dev Container 设置 新建一个文件夹 ./devcontainer 然后下面放 devcontainer.json 然后安装 vscode dev container 插件&#xff0c;然后 CtrlShiftP 启动 Container {"name": "PyTorch-Julia Development","image": "x66ccff/p…

浅谈操作系统与初识Linux

一、Linux操作系统的出现 1.1操作系统的出现以及相关的四个要素 1.2最早出现的操作系统及其创始人 起初&#xff0c;IBM为了让计算机可以以更低技术成本进行使用&#xff0c;以此来售卖计算机&#xff1b; 为计算机搭载上了Unix操作系统&#xff0c;Unix由肯汤普森用汇编语…

ElasticSearch下

DSL查询 叶子查询&#xff1a;在特定字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使用复合查询&#xff1a;以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理&#xff1a; 排序&#xff1a;按照1个或多个字段做排序分页…

牛客----mysql

查找除复旦大学的用户信息_牛客题霸_牛客网 题目&#xff1a;现在运营想要查看除复旦大学以外的所有用户明细包括的字段有 device_id、gender、age、university&#xff0c;请你取出相应数据 示例&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male…

Android SystemUI——CarSystemBar车载状态栏(九)

上一篇文章我们介绍了车载开发中的 CarSystemUI,而车载开发中的状态栏也被 CarSystemBar 所取代,这里我们就来看看一下车载系统中的状态栏——CarSystemBar。 一、车载状态栏创建 1、CarSystemBar 源码位置:/packages/apps/Car/SystemUI/src/com/android/systemui/car/sy…

java根据模板导出word,并在word中插入echarts相关统计图片以及表格

引入依赖创建word模板创建ftl模板文件保存的ftl可能会出现占位符分割的问题&#xff0c;需要处理将ftl文件中的图片的Base64删除&#xff0c;并使用占位符代替插入表格&#xff0c;并指定表格的位置在图片下方 Echarts转图片根据模板生成word文档DocUtil导出word文档 生成的wor…

链式前向星的写法

【图论02】动画说图的三种保存方式 降低理解门槛 邻接表 链式前向星 邻接矩阵_哔哩哔哩_bilibili 杭电ACM刘老师-算法入门培训-第12讲-拓扑排序及链式前向星_哔哩哔哩_bilibili 图论003链式前向星_哔哩哔哩_bilibili&#xff08;链式前向星的遍历&#xff09; head数组的下标…

Trie(算法版)

#include <iostream>using namespace std;const int N100010; int son[N][26],cnt[N],idx; //son记录trie数&#xff0c;cnt记录每个词出现的次数&#xff0c;idx记录每个字符所占⽤的下标//加入字符串 void add(char str[]){//idx 0既表⽰根节点也表⽰空节点int p 0;fo…

软件工程导论

第 1 章 软件工程学概述&#xff1a;介绍了软件危机的表现、产生原因及消除途径&#xff0c;阐述了软件工程的定义、基本原理和方法学&#xff0c;还讲解了软件生命周期和软件过程的相关概念&#xff0c;包括瀑布模型、快速原型模型等多种软件开发模型当当。第 2-8 章 软件生命…

想品客老师的第一天:值类型使用

前面两章的摘要 ECMAscript&#xff08;也就是ES&#xff09;是JavaScript的一个标准&#xff0c;就像c的c11和c99一样&#xff0c;几把的一年出一套标准 freeze()是一个对象方法&#xff0c;表示锁定、固定一个对象不可改变&#xff08;因为const对于标量不可变&#xff0c;…

容器渗透横向

本质上要获得 1.获得容器IP段 2.获得主机IP段 3.获得本机IP 4.通过CNI或Docker0等扫描本机端口 Flannel 容器信息 rootubuntu-linux-22-04-desktop:/home/parallels/Desktop# k get po -A -o wide NAMESPACE NAME …

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

解决本地运行MR程序访问权限问题

文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类&#xff0c;抛出如下异常&#xff1a; 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时&#xff0c;遇到了 HDFS&#xff08;Hadoop 分布式文件系统&a…

【学习总结|DAY032】后端Web实战:登录认证

在 Web 后端开发中&#xff0c;登录认证是保障系统安全和用户数据隐私的关键环节。本文将结合实际开发案例&#xff0c;深入探讨登录功能与登录校验的实现思路和技术细节&#xff0c;希望能帮助读者更好地掌握这一重要知识点。 一、登录功能实现 1.1 思路分析 登录功能的核心…

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

sqlmap使用手册

sqlmap使用手册 一、sqlmap简介二、sqlmap常用命令三、sqlmap使用示例四、注意事项sqlmap使用手册 sqlmap是一个开源的渗透测试工具,主要用于自动检测和利用SQL注入漏洞来接管数据库服务器。以下是对sqlmap的详细介绍和使用指南: 一、sqlmap简介 sqlmap具有强大的检测引擎和…

高通8255 Android STR 启动失败要因分析调查

目录 背景&#xff1a; 调查过程&#xff1a; 步骤1&#xff1a; slog2info | grep vmm_service 步骤2&#xff1a; slog2info | grep qvm 总结&#xff1a; 解决方案 背景&#xff1a; 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后&#xff0c;脱出STR时…

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…