Docker上手系列:Docker入门hello world
时间:2022-07-25
本文章向大家介绍Docker上手系列:Docker入门hello world,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
0. 什么是docker
Docker 是一个开源的应用容器引擎。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
1. 安装docker
(1)注册docker hub账号
下载docker桌面软件必须要注册docker hub账号:
登录 https://hub.docker.com 按要求注册。
(2)下载docker软件
点击【Explore】-> 【Docker CE】
注意:Docker EE是企业版,Docker CE是社区版,这里我们使用企业版就可以了。
下面以Mac系统为例,windows类似:
(3)检查docker是否成功安装
$ docker --version
出现如下回显表明安装成功:
2. 运行第一个docker容器
登录docker
$ docker login
拉取hello-world镜像
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Already exists
Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8
Status: Downloaded newer image for hello-world:latest
查询所有镜像列表
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB
启动容器
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
至此docker hello world已经成功运行。
在Java web开发中常常会用到tomcat容器,现在我们使用docker运行一个tomcat容器。
拉取镜像
$ docker pull tomcat
查询所有镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 5377fd8533c3 8 days ago 506MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
启动容器
$ docker run -it --rm -d -p 80:8080 tomcat
b2f78e1d1a34a9b27e9db3529499eebdb99a0a58b2ba64d1e73a01c260c5e4b8
检查tomcat是否启动成功
查看容器运行状态
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2f78e1d1a34 tomcat "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:80->8080/tcp angry_jennings
停止容器
$ docker stop b2f78e1d1a34
3. 编写第一个docker镜像
上面的例子都是拉取官方提供的镜像,然后直接运行,接下来编写第一个hello world镜像:
(1)新建 Dockerfile 文件
$ vim Dockerfile
# 扩展基础镜像
FROM ubuntu:16.04
# 添加作者信息
MAINTAINER coderspace <ray_here@qq.com>
# 输出字符串
CMD echo hello world
(2)编译docker file文件,构建镜像文件
$ docker build -t coderspace/helloworld:0.1 .
-t 参数表示镜像名称和版本号
. 表示docker file 文件在当前路径下
$ docker build -t coderspace/helloworld:0.1 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM ubuntu:16.04
---> 13c9f1285025
Step 2/3 : MAINTAINER coderspace <ray_here@qq.com>
---> Running in 106949592dec
Removing intermediate container 106949592dec
---> 1a5e5cf7094e
Step 3/3 : CMD echo hello world
---> Running in 88ca7e153fa0
Removing intermediate container 88ca7e153fa0
---> 2aeddf156cf3
Successfully built 2aeddf156cf3
Successfully tagged coderspace/helloworld:0.1
(3)运行镜像文件,启动容器
查看镜像文件列表
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
coderspace/helloworld 0.1 2aeddf156cf3 7 minutes ago 119MB
运行镜像
$ docker run coderspace/helloworld:0.1
输出:
hello world
至此编写属于自己的镜像文件流程已介绍完,接下来学习一下如何将自己写的镜像文件推送到官方hub仓库供其他人使用。
4. 推送镜像文件至官方hub仓库
使用docker push 命令可以将本地镜像文件推送至远程仓库。
$ docker push coderspace/helloworld:0.1
The push refers to repository [docker.io/coderspace/helloworld]
92d3f22d44f3: Mounted from library/ubuntu
10e46f329a25: Mounted from library/ubuntu
24ab7de5faec: Mounted from library/ubuntu
1ea5a27b0484: Mounted from library/ubuntu
0.1: digest: sha256:ee05e03b1a122f82fb8a3e5ce8c5b07b8737a39f78c1d6b064ae91e28d5da211 size: 1150
登录docker hub主页,发现helloworld 已经推送至主仓库:
- 复合事件处理(Complex Event Processing)介绍
- Quartz.net官方开发指南 第三课:更多关于Jobs和JobDetails
- 为你的WordPress 主题添加结构化数据/丰富文本摘要,高亮搜索结果(下)
- Quartz.net官方开发指南 第四课:关于Triggers更多内容
- 数据分析:寻找Python最优计算性能
- 事件流处理框架NEsper for .NET
- Quartz.net官方开发指南 第五课: SimpleTrigger
- SQL Server Performance Dashboard Reports
- 添加WordPress评论输入邮箱实时显示Gravatar头像功能
- Quartz.net官方开发指南 第六课 : CronTrigger
- WordPress 中禁止某个用户在线编辑主题
- Quartz.net官方开发指南 第七课 : TriggerListeners和JobListeners
- Quartz.net官方开发指南 第八课:SchedulerListeners
- 为WordPress 后台编辑器文本模式(HTML模式)添加按钮
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 初识 Spring
- Leetcode 55. 跳跃游戏 (贪心)
- SpringBoot 报 No operations allowed after connection closed 异常解决办法
- Leetcode 15 三数之和(双指针,去重)
- 洛谷 P1886 滑动窗口 /【模板】单调队列 (单调队列、线段树、RMQ(ST表))
- SpringBoot 整合 JMSTemplate
- Leetcode 3. 无重复字符的最长子串 (滑动窗口+HashMap)
- MQ 系列之 JMSTemplate
- Leetcode 76. 最小覆盖子串 (双指针,map)
- ExpiringMap,一个可以用于缓存的 Map
- Leetcode 121. 买卖股票的最佳时机 (DP,模拟)
- MQ 系列之初识消息中间件
- Leetcode 第23场双周赛C 5361. 圆和矩形是否有重叠 (计算几何 初中数学)
- vue-cli 4 快速构建一个 Vue 项目
- SpringDataJPA 系列之快速入门