Docker笔记--镜像&基于GO项目创建Docker镜像

核心概念

  • Doker镜像--包含一个基本的操作系统运行环境和应用程序,镜像是创建Docker容器的基础。
  • Docker容器--如果把镜像理解成对象,则容器就是对象的实例,他也包含基本的操作系统环境,并且可以启动、开始、停止、删除,每个容器之间是互相隔离的
  • Docker仓库--存放Docker镜像的仓库,分为公有仓库和私有仓库
  • 仓库注册服务器--存放仓库的地方,每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分

获取镜像

  • docker [image] pull NAME[:TAG]--从DockerHub获取镜像,NAME是镜像仓库名称(用来区分镜像), TAG是镜像的标签(往往用来表示版本信息)。如果不显式指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。
  • docker images/docker image ls--列出本机已有镜像信息
  • docker tag ubuntu:18.04 myubuntu:18.04--修改镜像标签

删除和清理镜像

  • docker rmi/docker image rm--删除镜像

    • -f, -force:强制删除镜像,即使有容器依赖它;
    • -no-prune:不要清理未带标签的父镜像。
  • docker image prune--清理无用的临时镜像
    • -a, -all:删除所有无用镜像,不光是临时镜像;
    • -f, -force:强制删除镜像,而不进行提示确认。

导出导入镜像

  • docker [image] save--导出镜像到本地文件,可以使用-o参数指定文件名
  • docker [image] load--从本地文件导入镜像,可以使用-i参数指定文件名,或者使用<导入

创建镜像

  • 基于已有镜像的容器创建--docker commit [OPTIONS]--类似于git的commit命令

    • -a, --author="":作者信息;
    • -c, --change=[]:提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
    • -m, --message="":提交消息;
    • -p, --pause=true:提交时暂停容器运行。
  • 基于本地模板导入--docker import
  • 基于Dockerfile创建--docker [image] build NAME[:TAG]--Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

Dockerfile语法知识

# 指定基础镜像,必须为第一个命令
FROM <image name> # 指定作者
格式:
MAINTAINER <name>
示例:
MAINTAINER Kingram # 构建镜像时执行的shell或者exec命令,UN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
格式:
RUN <command>
exec执行
格式:
RUN ["executable", "param1", "param2"]
示例:
RUN ["executable", "param1", "param2"]
RUN apk update
RUN ["/etc/execfile", "arg1", "arg1"] # 将本地文件添加到容器中
格式:
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] # 用于支持包含空格的路径 示例:
ADD hom* /mydir/ # 添加所有以"hom"开头的文件
ADD hom?.txt /mydir/ # ? 替代一个单字符,例如:"home.txt"
ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/
ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/ # 指定容器启动时执行的命令,Dockerfile只允许使用一次CMD指令。 使用多个CMD会抵消之前所有的指令,只有最后一个指令生效。 CMD有三种形式:
格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
CMD command param1 param2 (执行shell内部命令)
示例:
CMD echo "This is a test." | wc -
CMD ["/usr/bin/wc","--help"]
注:
  CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
  
# 配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。
格式:
ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
ENTRYPOINT command param1 param2 (shell内部命令)
示例:
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"] # 指定RUN、CMD与ENTRYPOINT命令的工作目录。在使用docker run运行容器时,可以通过-w参数覆盖构建时所设置的工作目录。
格式:
WORKDIR /path/to/workdir
示例:
WORKDIR /a (这时工作目录为/a)
WORKDIR b (这时工作目录为/a/b)
WORKDIR c (这时工作目录为/a/b/c) # 指定交互端口,EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口
格式:
EXPOSE <port> [<port>...]
示例:
EXPOSE 80 443
EXPOSE 8080
EXPOSE 11211/tcp 11211/udp

举个栗子:一个简单的GO程序创建为docker镜像

代码如下:

//hello.go
package main import (
"fmt"
) func main() {
fmt.Println("Hello, World!")
}

第一步编译:

go build -o hello

第二步编写Dockerfile

FROM golang

RUN mkdir $GOPATH/src/hello

COPY ./hello $GOPATH/src/hello

WORKDIR $GOPATH/src/hello

RUN chmod +x hello

第三步创建镜像

docker build -t hello:1.0 .

# 查看镜像
docker images

第四步创建并启动容器

docker run hello:1.0

Docker笔记--镜像&基于GO项目创建Docker镜像的更多相关文章

  1. Docker 学习笔记 (一)Dockerfile 创建本地镜像

    一.测试环境 OS version: CentOS Linux release 7.5.1804 (Core) docker cluster : master 1 + data node 4 dock ...

  2. 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)

    写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...

  3. Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】

    一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...

  4. Docker笔记(十二):Docker Compose入门

    1. Compose简介 Docker Compose是Docker官方的用于对Docker容器集群实现编排,快速部署分布式应用的开源项目.Docker Compose通过docker-compose ...

  5. 【Django笔记0】-Django项目创建,settings设置,运行

    Django项目创建,settings设置,运行 1,项目创建 ​ 通过pip下载Django以后,在cmd中cd到想要创建项目的路径,之后输入: django-admin startproject ...

  6. docker笔记(3) ------Django项目的docker部署

    2019-01-12   14:23:18 django容器连接到mysql_server容器分析:原myblog项目使用sqlit3数据库,使用mysql容器前需要在django中加入pymysql ...

  7. Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

    一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...

  8. Docker练习例子:基于 VNCServer + noVNC 构建 Docker 桌面系统

    0. 安装docker 这一步略,网上有好多教程,一般出现装不上的原因,也就是网速问题了,这个我也很难帮你. 1. 下载指定的镜像images docker pull dorowu/ubuntu-de ...

  9. Docker 创建镜像、修改、上传镜像

    Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...

随机推荐

  1. Packing data with Python

    Defining how a sequence of bytes sits in a memory buffer or on disk can be challenging from time to ...

  2. 【软工】个人项目作业——个人软件流程(PSP)

    [软工]个人项目作业--个人软件流程(PSP) 项目 内容 班级:北航2020春软件工程 006班(罗杰.任健 周五) 博客园班级博客 作业:设计程序求几何对象的交点集合 个人项目作业 个人课程目标 ...

  3. docker中运行envoy 报错 cannot bind '0.0.0.0:80': Permission denied

    docker-compose文件 version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest volumes: ...

  4. [bug] Docker:Error ruuning deviceCreate(createSnapDevice) dm_task_run failed

    原因 删除容器时报错,元信息出错,需要修复 最后一个参数要改成自己docker元信息路径,如: thin_check --clear-needs-check-flag /var/lib/docker/ ...

  5. [刷题] 剑指offer 面试题18:删除链表节点

    要求 给定单向链表的头指针和一个节点指针,在O(1)时间内删除该节点 常规思路:从头节点a开始顺序遍历,发现p指向要删除的节点i,然后把p的m_pNext指向i的下一个节点j,时间复杂度O(n) O( ...

  6. https 真的安全吗,可以抓包吗,如何防止抓包吗

    Android_interview github 地址 大家好,我是程序员徐公,加上实习,有五年中大厂经验.自荐一下,可以关注我的微信公众号程序员徐公 公众号程序员徐公回复黑马,获取 Android ...

  7. 爱心跳动效果 CSS实现

    爱心跳动效果 CSS实现 实现效果 砰砰砰 实现原理 通过动画改变每个元素的高度,从而实现每个元素高度变化的效果,为了使每个元素依次跳动,给每个元素添加一定的延时效果,使得从效果元素依次跳动 代码分析 ...

  8. 快速上手 Linkerd v2 Service Mesh(服务网格)

    在本指南中,我们将引导您了解如何将 Linkerd 安装到您的 Kubernetes 集群中. 然后我们将部署一个示例应用程序来展示 Linkerd 的功能. 安装 Linkerd 很容易.首先,您将 ...

  9. Python+Selenium - 文件上传

    如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...

  10. CVPR2020论文解读:OCR场景文本识别

    CVPR2020论文解读:OCR场景文本识别 ABCNet:  Real-time Scene Text Spotting with Adaptive Bezier-Curve Network∗ 论文 ...