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. ASP.NET Core文件压缩最佳实践

    前言 在微软官方文档中,未明确指出文件压缩功能的使用误区. 本文将对 ASP.NET Core 文件响应压缩的常见使用误区做出说明. 误区1:未使用 Brotil 压缩 几乎不需要任何额外的代价,Br ...

  2. Advanced Archive Password Recovery (ARCHPR) 是一个强大的压缩包密码破解工具,适用于ZIP和RAR档案的高度优化的口令恢复工具。

    RAR压缩文件密码破解工具是一款简单易用的RAR文档和ZIP文档密码破解软件,如果你不小心忘了解压密码或是下载的RAR文件需要密码,那么均可以使用本软件进行暴力破解.不管WinRAR /RAR 的密码 ...

  3. CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录

    CentOS 8.2远程连接vncserver升级后1.10.1无法启动解决记录   问题起源:手贱yum upgrade,重启服务器后无法使用vnc viewer远程连接 查看状态 # system ...

  4. SSM整合(ForestBlog为例)

    SSM整合(ForestBlog为例) 原版本github地址 :https://github.com/saysky/ForestBlog 文中版本地址:https://github.com/Yans ...

  5. 如何解决在WordPress安装Redis插件时需要输入FTP问题?

    用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...

  6. 并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

    在前面的文章<青铜4:synchronized用法初体验>中,我们已经提到锁的概念,并指出synchronized是锁机制的一种实现.可是,这么说未免太过抽象,你可能无法直观地理解锁究竟是 ...

  7. SqlServer事务详解(事务隔离性和隔离级别详解)

    概述 不少人对于事务的使用局限于begin transaction:开始事务.commit transaction:提交事务.rollback transaction:回滚事务的初步运用. 并且知道使 ...

  8. Ubuntu中的MySQL修改root密码的多种方法

    查看.修改mysql的用户名和密码第一步:这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的用户名和密码,然后使用这个文件中的用户名和密码进入mysq ...

  9. JDBC使用详解

    第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以 ...

  10. Tensorflow 2.0 搭建神经网络(局部)

    前向传播 tensorflow.keras 搭建网络时,内部的网络可以直接完成所有层的前向计算.全连接Dense() 层,最后一层的神经元的个数需要和最后一层线性函数 w x + b 的维度对应上,中 ...