搭建第一个Docker

2023-11-10

Docker 是一个开源的容器引擎,用于创建、管理和编排容器,可以轻松为任何应用创建一个轻量级、可移植、自给自足的容器。本步骤将在linux上部署一个Docker服务,并配置DockerHub的镜像加速器。

安装软件包

在linux命令行输入如下命令,这些命令用来安装一些软件包。

yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件仓库 

 添加Docker CE的软件源信息,如下命令,从指定url添加软件仓库。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker 

安装Docker CE,dockerCE为docker的社区版本。

yum makecache fast &&
yum -y install docker-ce

启动Docker服务 

 启动Docker服务。

systemctl start docker

配置镜像加速器 

 配置DockerHub镜像加速器。

可参考:Docker 镜像加速 | 菜鸟教程

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF

重启Docker服务 

重启Docker服务。

systemctl restart docker

准备应用代码和Dockerfile

本步骤操作将在工作空间下创建一个基于Golang的HelloWorld代码文

和一个用来构建运行Hello代码所需环境镜像的Dockerfile文件。

Dcokerfile用来存放指令,运行可构建镜像。 

1. 创建工作空间。

mkdir -p /tmp/demo && cd /tmp/demo

2. 在工作空间下创建HelloWorld代码文件,用来在容器环境中监听HTTP服务,输出HelloWorld字符串。

cat > /tmp/demo/main.go << EOF
package main

import (
        "fmt"
        "net/http"
)

func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
                fmt.Fprintf(w, "Hello! World\n")
        })

        fmt.Println("start to serve...")
        http.ListenAndServe(":80", nil)
}
EOF

3. 在工作空间下创建Dockerfile文件。

cat > /tmp/demo/Dockerfile << EOF
FROM golang:1.12-alpine

# change current working dir
WORKDIR /go/src/app

# copy main.go into /go/src/app
COPY . .

# go build and install the app
RUN go install -v ./...

# run the app by default
CMD ["app"]
EOF

本地构建镜像并运行镜像

镜像不仅可以从仓库获取还可以本地构建

1. 使用docker build命令构建镜像。

docker build . -t demo:v1

命令运行结果如下所示:

说明:

  • 参数.表示指定当前路径作为构建上下文,即Dockerfile所在的本地路径。

  • 参数-t demo:v1指定镜像名称和标签。

运行镜像 

使用docker run命令运行镜像。

docker run -d -p 8000:80 demo:v1

命令运行结果如下所示:

说明:

  • 参数-d设置容器运行模式为后台运行。

  • 参数-p 8000:80将容器内部使用的网络端口映射到主机上,其中8000为主机端口,80为容器内部使用端口。

 使用curl工具访问容器中的HelloWorld服务。(类似于从浏览器访问地址)

curl localhost:8000

命令运行结果如下所示:

删除容器 

使用docker rm命令删除容器。

docker rm -f $(docker ps -a | grep "demo:v1" | awk '{print $1}')

命令运行结果如下所示:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建第一个Docker 的相关文章

随机推荐

  • linux下部署thinkphp5项目

    准备工作 购买一个linux服务器地址 安装好linux常用的ssh工具 我这边喜欢用xshell敲命令 用filezilla传输文件 这些工具只要到官网下载就好 速度很快的 1 安装phpstudy for linux 安装下载phpst
  • java:JSONArray转byte[]字节数组

    package com xxx huali hualitest json import com alibaba fastjson JSONArray import com alibaba fastjson util Base64 publi
  • C语言运行流程

    在上一篇文章visual studio如何运行并调试C语言代码中写了如何运行并调试代码 我们就明确一个事实 即不论是嵌入式系统 亦或是普通PC电脑 对于程序的运行硬件处理器只能识别0 1的二进制码 从类人语言的C代码 需要经过一系列的转换过
  • 各种算法使用场景

    深度优先搜索BFS VS 广度优先搜索 DFS 算法就是回溯算法 BFS 相对 DFS 的最主要的区别是 BFS 找到的路径一定是最短的 但代价就是空间复杂度可能比 DFS 大很多 递归灵魂三问 labuladong 告诉你 遇到任何递归型
  • SQL Server基础Sql语句复习

    基础至极 1 创建表 create table Course Cno char 4 primary key not null 创建主键 非空 Cname char 40 not null Cpno char 4 Ccredit smalli
  • 软件测试报告bug统计,软件测试中如何有效地写Bug报告

    引言 为公众写过软件的人 大概都收到过很拙劣的bug 计算机程序代码中的错误或程序运行时的瑕疵 译者注 报告 例如 在报告中说 不好用 所报告内容毫无意义 在报告中用户没有提供足够的信息 在报告中提供了错误信息 所报告的问题是由于用户的过失
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • 为什么P值不再是0.05(孟德尔随机化)

    为什么P值不再是0 05 孟德尔随机化 为什么P值不再是0 05 孟德尔随机化
  • 长连接和短链接的区别

    长连接意味着进行一次数据传输后 不关闭连接 长期保持连通状态 如果两个应用程序之间有新的数据需要传输 则直接复用这个连接 无需再建立一个新的连接 就像下图这样 它的优势是在多次通信中可以省去连接建立和关闭连接的开销 并且从总体上来看 进行多
  • < 数据结构 > 堆的应用 --- 堆排序和Topk问题

    目录 1 堆排序 法一 自己写堆进行排序 时间复杂度分析 法二 直接对数组建堆 向上调整建堆 向下调整建堆 向上建堆和向下建堆熟优 升序能否建小堆 排序 建大堆 2 TopK问题 何为Topk 实现过程 1 堆排序 假如我们有一串乱序数组
  • 深度学习论文:Deep Residual Learning for Image Recognition

    论文 He Kaiming et al Deep residual learning for image recognition Proceedings of the IEEE conference on computer vision a
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 【更好的中文语音识别SpeechBrain Win10/11本地部署,基于Aishell】

    环境 Win11x64 Vscode Python3 7 2x64 Pytorch1 9 CPU or GPU 本文默认Win11 Win10 100 素可以得 默认向下兼容 首先 你得把Vscode弄好 python 插件安装 py环境搭
  • Qt多线程的几种实现方式

    Qt多线程的几种实现方式 在Qt中经常会遇到耗时操作 需要并发执行 这个时候就要用到多线程 Qt的多线程有多种实现形式 这里介绍3种方式 类实现形式 用类实现多线程是最传统的实现形式 思想是写一个继承QThread的类 然后通过run 来开
  • 【drug】获取化合物的3D结构

    如何从化合物的SMILES字符串获取化合物的3D结构 以下几种方法供参考 1 借助pubchem的py查询接口进行查询 首先需要安装pubchempy conda install pubchempy sdf pubchempy get sd
  • 震惊小伙伴的单行代码(Python篇)

    几年前 函数式编程的复兴正值巅峰 一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红 很快地 一系列使用其他语言实现这些单行代码的文章也随之出现 比如 Haskell Ruby Groovy Clojure Python C
  • 【数据库实验】多表查询

    例3 48 查询平均成绩大于等于90分的学生学号和平均成绩 注意 聚合不应出现在 WHERE 子句中 除非该聚合位于 HAVING 子句或选择列表所包含的子查询中 并且要对其进行聚合的列是外部引用 正确写法 select Sno AVG G
  • 一分钟快速把一篇论文后面的参考文献全部下载下来

    之前写了一篇博客 将一篇论文的全部参考文献一键导入到mendely 但是我发现 导入进去之后尽管文献的所有信息以及摘要在mendely里都有了 可是并不能查看文献内容 即没有PDF文档 因此我又找了其他办法 第一步 你需要下载一个EndNo
  • JavaScript简单算法-----二分查找

    二分查找又称折半查找 只适用于有序数组 二分查找就是将需要查找的元素不断地与数组中间的元素进行比较 数组不断地拆分为两段 查找元素小于中间值在前半段查找 大于中间值在后半段进行查找 代码展示 javaScript 的二分查找算法 var A
  • 搭建第一个Docker

    Docker 是一个开源的容器引擎 用于创建 管理和编排容器 可以轻松为任何应用创建一个轻量级 可移植 自给自足的容器 本步骤将在linux上部署一个Docker服务 并配置DockerHub的镜像加速器 安装软件包 在linux命令行输入