从开发到部署会用到的 Docker 命令
本文的目的是理解容器开发在目标环境中部署的端到端流程,并列出这些操作所需的 Docker 命令。如果有任何Docker问题,请移步到最新最热的技术社区 IT帮 itbang.me 提问,短信通知专家来回答。
1. 介绍
整个流程包括使用代码、依赖软件和配置来开发容器映像,在开发环境中运行和测试容器,将容器映像发布到 Docker Hub,以及最后的部署和在目标环境中运行容器。
本文假设您已经在开发和目标环境中安装了 Docker 引擎
2. 开发容器映像
在构建容器映像之前,你需要创建一个 dockerfile,它包含了所需要的信息。请参考这里来编制一个 dockerfile。
2.1 构建 Docker 容器
$docker build -t containername .
这个命令会使用当前目录下的 Dockerfile。如果 dockerfile 使用了其它文件名或者放在其它位置,可以使用 -f 参数来指定 dockerfile 的名称。“docker build” 命令会构建容器映像,这个容器映像的名称由 “-t” 参数指定。
$docker build -t myapp .
2.2 Docker 映像命名规范
如果你只是在本地使用,那么你可以随意为 Docker 容器命名。它可以像上面那边简单的命名为“myApp”。但是如果你想将映像发布到 Docker Hub,就需要遵循特定的命名规范。这个规范有助于 Docker 工具将容器映像发布到正确的命名空间和仓库。
格式如下:
NameSpace/Repository:Version
现在我们按上面的规范来构建 Docker 映像:
$docker build -t saravasu/techietweak:001 .
我们可以使用“docker tag”命令从已经存在的映像创建新的映像。“docker tag”命令会在下面说明。
2.3 列出 Docker 中所有映像
$docker images

3. 运行容器
3.1 启动 Docker 容器
使用“docker run”命令来启动 Docker 容器。
$docker run -d -p 8080:8080 saravasu/techietweak:001

“-d” 参数会让容器以独立的模式来运行容器,这样即使终端关闭了容器仍然会保持运行。
“-p” 用于映射容器。比如,“-p 8080:8080” 的第一个端口号用在 Docker 主机上,第二个端口号是在 Docker 容器中使用的。根据这个参数的设置,所有对 Docker 主机端口的数据传输都会被转发到对应的 Docker 容器端口。
3.2 查看运行中的容器
$docker ps

从上面的输出我们可以看到 Docker 容器以 “trusting_snyder” 这个名字在运行。
如果要列出所有容器,而不管其状态如何,使用 “-a” 参数。
$docker ps -a
3.3 显示运行中容器的控制台日志
$docker logs <containerName>

ContainerName(容器名称) 可以通过 “docker ps” 命令找到。
3.4 登入容器
$docker exec -it containerId /bin/bash
上面的命令会用容器中的 “bash” shell 给出提示。

3.5 停止容器运行
$docker stop <containername>
3.6 从 Docker 中删除容器映像
$docker rm imageId
使用 “docker images” 或 “docker images -a” 命令找到 imageId(映像 ID)。
$docker rmi -f <List Of Image Ids>

上面的命令会强制删除指定的映像。
3.7 清理 Docker / 删除本地 Docker 中所有容器映像
$docker rmi -f $(docker images | tr -s ' ' ' ' | cut -d' ' -f3)
4. 发布容器映像
Docker 容器映像可以发布到本地库或公共的 Docker Hub。两种情况所使用的命令的操作过程一样。为了将你的 Docker 映像发布到 Docker Hub,你得先在 http://hub.docker.com 创建自己的命名空间和仓库。
我自己的命名空间是 “saravasu”,当前练习使用的仓库是 “techietweak”。

4.1 登录 Docker Hub
$docker login
如果你想登录本地库,请先提供 URL。如果没有指定 URL,那么这个命令会登录 Docker Hub。
$docker login http://localhost:8080
4.2 标记容器映像
在把容器映像推送到 Docker Hub 之前,必须按指定的格式对其进行标记:<Namespace>/<Repository>:<Version>。如果你没有指定版本(version),它会使用默认的 “default”。下面的命令演示了标记映像:
$docker tag myapp:latest saravasu/techietweak:001
4.3 将 Docker 映像推送到 Docker Hub
$docker push saravasu/techietweak:001
4.4 在 Docker Hub 中检查容器映像
现在使用你的账号登录 Docker Hub 并检查映像的仓库中进行检查。

5 部署容器
5.1 拉取 Docker 容器映像
在主机的目标环境中登录 Docker Hub 并从 Docker Hub 拉取容器映像。如果你想从私有的船坞(指 Docke 映像库)中拉取,需要使用命令 “$docker login <hostname>” 来指定私有仓船坞的主机名(hostname)。
$docker login
由于上面的命令没有指定主机名称,它会登录 https://hub.docker.com。
$docker pull saravasu/techietweak:001

5.2 检查映像
docker pull 命令会从 Docker Hub 下载容器映像。我们可以使用 “docker images” 命令来对其进行检查。
$docker images

5.3 运行容器
现在我们用与在开发环境下运行测试相同的方法来运行 Docker 容器。之前做过,轻车熟路。
$docker run -d -p 8080:8080 saravasu/techietweak:001
docker run 命令会启动容器。可以使用 “docker ps” 命令来检查。Docker 创建并运行了一个新的容器,其名称为 “naughty_lewin”。
我们在上面看到 Docker 引擎为运行的容器提供了一个随机的名称,这在自动化过程中可能会产生问题,所以最好是按我们的意愿指定一个名称。这可以由 “-name” 参数实现。
$docker run -d -p 8080:8080 --name "myNodeJsWebContainer" saravasu/techietweak:001

6. 总结
本文涵盖了开发一个容器映像的流程和必要的命令,讲解了在本地环境运行,以及将映像发布到 Docker Hub,并在目标环境运行容器。想进一步研究,或者阅读详细的文档,请移步 Docker 网站, 或者到最新最热的技术社区 IT帮 itbang.me 提问,短信通知专家来回答。
从开发到部署会用到的 Docker 命令的更多相关文章
- 有意思的Python:开发和部署一览
我觉得在有时间的条件下,学习不同的开发语言,对于保持对技术的理解是有帮助的. Python是一门这样简单而且有趣的语言.网上资料已经比较多了.我这里主要对开发和部署环境所涉及的几个工具做些介绍. 1. ...
- SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境
上一篇我讲解了如何利用微软提供的Office 365开发人员网站,进行在线的SharePoint App开发,这当然是不错的一个选择,因为你可以快速地进行开发和调试.(仅仅针对App开发而言).但是, ...
- 一个CentOS7的开发环境部署,包括防火墙|VPN|多IP多网关|HTTP代理服务器设置等
http://www.lenggirl.com/code/centos7.html layout: post title: "一个CentOS7的开发环境部署,包括防火墙|VPN|HTTP代 ...
- 西秦的ACE-Python教程 一、Python本地开发环境部署
西秦的ACE-Python教程 一.Python本地开发环境部署 西秦 级别: 论坛版主 发帖 1357 云币 2782 加关注 写私信 只看楼主 更多操作楼主 发表于: 10-10 ...
- 【J2EE】struts-2.3.16.3+apache-tomcat-8.0.9开发环境部署,“Hello World”的实现。
1.在官网下载Struts2的开发包 下载链接如下: http://120.203.229.30/5ff/2bc79/5ff16ae8698e1c321758a8f03a1bc0939892bc79/ ...
- Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
转自:http://www.oschina.net/translate/docker-lightweight-linux-containers-consistent-development-and-d ...
- vs2012 + web api + OData + EF + MYsql 开发及部署
先说下我的情况,b/s开发这块已经很久没有搞了,什么web api .MVC.OData都只是听过,没有实际开发过,因为最近要开发一个手机app的服务端,所以准备用这套框架来开发. 下面开始进入正题( ...
- Electron开发环境部署
Electron开发环境部署 安装node.js 可以从node.js官方网站上获取安装包,并进行安装,安装完可以通过 ndoe -v 指令进行版本查看. 本文的开发环境为node.js 4.4.5. ...
- 【Sharepoint】CSS与Master Page的开发与部署
一.CSS的开发与部署相对比较简单,先是要上传CSS文件到样式库中,然后在页面模板中将上传的自定义CSS样式文件设置为所有文件的默认css文件.下面详细的介绍CSS文件的开发与部署过程. 1.编写自定 ...
随机推荐
- linux一周学习总结
对于linux,之前也完全没有接触过,完全零基础小白.来到马哥以后,进入学习也有一周时间 ,一周里老师带我们学习了很多指令,下面,我就自己的理解和老师讲授的内容对linux中的一些指令做一个简单的小总 ...
- 团队作业八—第二次团队冲刺(Beta版本) 第 2 天
一.每个人的工作 (1) 昨天已完成的工作 昨天的工作主要是一些界面的设计,我们顺利完成了复杂模式题目数目界面.复杂模式做题界面.结果统计界面的具体代码编写,和一些细节的完善.还有日常冲刺博客的编辑. ...
- 201521123101 《Java程序设计》第5周学习总结
1. 本周学习总结 2. 书面作业 1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 不能 ...
- 201521123077 《Java程序设计》第2周学习总结
1. 本周学习总结 动态数组 标识控制符的意义 ArrayList ,BigDecimal,BigInteger 等类的使用 组合,继承,多态等概念的了解 2. 书面作业 Q1.使用Eclipse关联 ...
- 201521123026 《java程序设计》 第九周学习总结
1. 本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) PTA提交结果: 运行结果截图: 1.2 ...
- linux fork两次避免僵尸进程的程序(简单)
#include<stdio.h> #include<unistd.h> int main() { pid_t pid,pid1; int status; ) { printf ...
- Selenium+Python自动化测试实战(2)元素定位
1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事, ...
- Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库
装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.? 装饰器 原函数返回值 ...
- Java-大集合拆分为指定大小的小集合
因为Oracle数据的in 最大允许1000 ,超过就会报错, 所以需要将集合拆分为多个集合进行处理. /** * 拆分集合 * @param <T> * @param resList 要 ...
- 记一次Linux下给硬盘分区格式化操作
今天找到一张旧TF卡,2G的,正好拿来练习下建立分区 插上orangepi后,fdisk -l看看,可以看到多了一个新的存储设备 /dev/mmcblk1 用fdisk打开它: fdisk /dev/ ...




