Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker入门及自定义容器

Docker入门及自定义容器

作者头像
用户2987604
发布于 2020-06-15 08:01:16
发布于 2020-06-15 08:01:16
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

Linux Containers Linux容器 缩写LXC,其对进程进行隔离,而非一个完整的操作系统。Docker属于LXC的一种封装,提供简单易用的容器使用接口。Docker主要用于提供一次性环境、提供 弹性的云服务、组件微服务架构

一、基本操作

1.1 Docker安装

Docker是一个开源的开品,有两个版本:CE(Community Edition)和EE(Enterprise Edition)。企业版包含一些收费服务,社区版适合个人开发者。

  • Ubuntu
  • CentOS
  • Mac

安装完成后,使用如下命令验证是否安装成功:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker -version

Docker需要用户具有sudo权限,为了避免每次输入sudo以及用户不具有sudo权限,请先使用管理员用户将特定的用户添加到Docker用户组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo usermod -a -G docker $USER

Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。如果这项服务没有启动,可以用下面的命令启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动Docker服务sudo service docker start# 设置开启自己懂systemctl enable docker.service# 检查开机自启动设置成功没systemctl list-unit-files |grep dockerdocker.service                             enabled docker.socket                              enabled 

1.2 Docker镜像文件image

Docker将应用程序及其依赖打包在镜像(image)文件里,通常一个image会继承自另一个image,开发者在其中加入个性化的配置,从而形成定制化的镜像文件。

Docker通过image来生成并运行虚拟容器。比如说我们的网站程序打包成image文件并拷贝在一个服务器上,通过docker根据此image文件在服务器上生成并运行多个相同的网站程序。

通过Docker管理image文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 列出本机的image文件docker image ls# 删除本机image文件docker image rm $image_name

image具备复用性,通常我们可以使用别人制作好的Image文件,这些共享镜像通常来自于Docker Hub。

1.3 Docker镜像实例

我们可以从Docker官方镜像仓库/第三方仓库拉取image文件并运行。

hello-world

从官方拉取hello-world镜像来感受下Docker:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker image pull library/hello-world
  • docker image pull:拉取镜像的命令
  • library:镜像文件所在组
  • hello-world:镜像文件的名字

Docker官方提供的镜像文件都在library下,因此library是默认镜像组,可省略不写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker image pull hello-world

1.4 Docker运行容器实例

基于image文件生成并运行容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker container run hello-worldHello from Docker!This message shows that your installation appears to be working correctly....

输出一段话后,hello-world容器自动终止。

有些容器不会自动终止,因为它们提供的是服务例如网站容器和虚拟操作系统容器,运行ubuntu的容器,docker会从镜像仓库下载ubuntu的镜像,下载完成后直接从ubuntu镜像运行容器实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker container run -it ubuntu bashUnable to find image 'ubuntu:latest' locallylatest: Pulling from library/ubuntuf476d66f5408: Pull complete...Status: Downloaded newer image for ubuntu:latestroot@341a7595b69e:
  • -t: flag assigns a pseudo-tty or terminal inside the new container.
  • -i: flag allows you to make an interactive connection by grabbing the standard in (STDIN) of the container.
  • -it:Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
  • bash: launches a Bash shell inside our container.

输入exit或按Ctrl+D可退出此ubuntu容器实例进程,此种方式依赖命令行运行,命令行退出则容器进程终止(使用Ctrl+P+Q也可退出容器且不关闭容器)。使用ps命令查看docker进程,可见ubuntu的进程已退出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED       STATUS    341a7595b69e        ubuntu              "bash"              2 minutes ago       Exited 44a7468dabfd        hello-world         "/hello"            23 minutes ago      Exited 

也可以将将容器作为后台进程运行,再使用attach命令进入在后台运行的容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker container run -itd ubuntu1f7b446e9a8f6a9e9ec8066526f055222c9cfb6bf75f5389a8a9163428d53272docker ps -a CONTAINER ID        IMAGE               COMMAND             CREATED       STATUS1f7b446e9a8f        ubuntu              "bash"              13 seconds ago      Up 11 seconds341a7595b69e        ubuntu              "bash"              2 minutes ago       Exited 44a7468dabfd        hello-world         "/hello"            23 minutes ago      Exited 

容器在后台运行成功,使用attach/exec命令进入后台进程的ubuntu容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# docker attach [OPTIONS] CONTAINERdocker attach 1f7b446e9a8f# docker exec [OPTIONS] CONTAINER COMMAND [PARAMS]docker exec 1f7b446e9a8f bashroot@1f7b446e9a8f:/#

容器进程退出,但容器文件依然存在,因此关闭容器不会删除容器文件。一些container常用命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动容器docker start CONTAINER# 50s内停止容器,否则强制停止docker stop -t 50 CONTAINER# 强制停止容器docker kill CONTAINER# 重启容器docker restart CONTAINER# 删除容器文件docker rm CONTAINER

二、自定义容器

使用Dockerfile来定制image,适应我们自己的需要。Dockerfile是一个文本配置文件,docker将根据它生成我们需要的image。

2.1 准备镜像所需的工程代码或文件

拉取测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/blackist/maven-quiz.git

在本地编译maven项目,mvn clean package编译出需要的war包。

也可基于maven镜像,在容器内构建maven项目,但需要令行配置

2.2 编写Docker配置文件

在此项目基础上构建Dockerfile项目,新建Dockerfile配置文件,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM openjdk:8VOLUME /tmpADD ./target/maven-quiz.jar /app.jarEXPOSE 8000ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"]
FROM openjdk:8

基于openjdk8镜像编译自定义镜像

VOLUME /tmp

将本地文件夹挂载到当前容器

ADD

ADD ./target/maven-quiz.jar /app.jar 是拷贝war文件到容器

EXPOSE 8000

开放8000端口

ENTRYPOINT

ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"] 配置容器启动后执行的命令,使用nohup使得java程序运行于后台,不至于命令行退出java程序终止。

  • ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,需谨记
  • CMD,表示镜像运行默认参数,可被重写覆盖
  • ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效 多个存在,只有最后一个生效,其它无效!
  • 需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,需切记!

ENTRYPOINT/CMD,一般两者可以配合使用,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ENTRYPOINT ["/usr/sbin/sshd"] CMD ["-D"]

2.3 编译Docker镜像

编译命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t maven-quiz .
  • docker build 或 docker image build:编译命令
  • -t:指定镜像的name,maven-quiz为镜像名,其后可加:来指定标签,默认为lastest
  • .:指定Dockerfile配置文件所在路径,.即是当前路径

编译过程如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Sending build context to Docker daemon  16.87MBStep 1/5 : FROM openjdk:8 ---> b8d3f94869bbStep 2/5 : VOLUME /tmp ---> Running in dd6790b892ccRemoving intermediate container dd6790b892cc ---> c22a0db1f2e0Step 3/5 : ADD ./target/maven-quiz.jar /app.jar ---> 3a7eb1b80968Step 4/5 : EXPOSE 8000 ---> Running in 95ea426741b7Removing intermediate container 95ea426741b7 ---> b472a3d4e0d5Step 5/5 : ENTRYPOINT ["nohup", "java", "-Dserver.port=8000", "-jar", "/app.jar", "&"] ---> Running in c95c9393b88fRemoving intermediate container c95c9393b88f ---> 48aa6f27aecfSuccessfully built 48aa6f27aecfSuccessfully tagged maven-quiz:latest

2.4 运行容器

运行命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -p 8000:8000 -itd maven-quiz

-docker run:运行容器

  • -p:指定本地:容器端口映射
  • -itd:容器在后台运行
  • maven-quiz:指定镜像,:后加标签,默认为lastest

参考

http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html

https://blog.csdn.net/zhezhebie/article/details/75501149

http://book.itmuch.com/3%20%E4%BD%BF%E7%94%A8Docker%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1/3.6%20%E4%BD%BF%E7%94%A8Dockerfile%E6%9E%84%E5%BB%BADocker%E9%95%9C%E5%83%8F.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 董亮亮的开发笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker入门实践
Docker 是基于 cGroup,namespace 等 Linux 内核技术实现对 Linux Container 的管理引擎
awwewwbbb
2021/09/14
3780
自动化集成:Docker容器入门简介
Docker作为开源的应用容器引擎,可以把应用程序和其相关依赖打包生成一个Image镜像文件,是一个标准的运行环境,提供可持续交付的能力,通过镜像文件可以创建多个Docker容器,这里可以理解为类创建对象的原理;镜像文件可以推送到仓库Repository中,这里可以理解为Git仓库管理代码的原理。
知了一笑
2021/12/30
4230
自动化集成:Docker容器入门简介
【docker系列】docker之部署springboot项目
本篇主题主要实战如何使用Docker部署springboot项目,那么首先保证服务器上已经安装完docker容器,如果尚未安装请移步《详解阿里云服务器安装docker》文章完成docker安装操作;以下直接搭建springboot项目;以下也是springboot项目中最基本的依赖项;因为我们想测试接口访问,故搭建的是一个web项目,那么我们提供一个controller层
沁溪源
2022/05/06
3.1K0
【docker系列】docker之部署springboot项目
Docker快速入门(二)
上篇文章《Docker快速入门(一)》介绍了docker的基本概念和image的相关操作,本篇将进一步介绍image,容器和Dockerfile。
用户1432189
2018/09/05
7250
Docker快速入门(二)
如何用Docker部署一个SpringBoot项目
Docker是指容器化技术,用于支持创建和使用 Linux容器。借助 Docker,我们可将容器当做轻巧、模块化的虚拟机使用。同时,还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境。
Lvshen
2022/05/05
1.4K0
如何用Docker部署一个SpringBoot项目
SpringBoot-Mysql应用Docker打包部署
直接安装 docker desktop for windows即可,其中还会包含了docker compose。可通过 docker-compose version来验证结果,一般会输出如下信息:
技术路漫漫
2020/06/21
2.3K0
SpringBoot-Mysql应用Docker打包部署
SpringBoot 多模块项目打包部署保姆级教程
docker pull mysql:8.0.16 ==> docker pull 镜像名称:镜像版本
木字楠
2022/11/15
2.2K0
SpringBoot 多模块项目打包部署保姆级教程
Docker 容器操作
容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
程序员鹏磊
2018/01/16
1.1K0
Docker 容器操作
一文零基础教你学会 Docker 入门到实践
Docker 自 2013 年发布至今一直备受关注,从招聘面试角度来看有些职位对于了解 Docker、K8S 这些也有一些加分项,同时学习 Docker 也是后续学习 K8S 的基础,但是对于 Docker 很多人也需并不了解,其实 Docker 也并没有那么难,本文从 Docker 入门到应用实践为大家进行讲解,中间也列举了很多实例,希望能帮助大家更好的理解。
五月君
2019/09/27
7730
一文零基础教你学会 Docker 入门到实践
Docker使用手册-基础篇
类似于github和国内的gitee一样的远程仓库,只不过docker hub是公共的镜像仓库,用户可以上传和下载公开的镜像使用。
用户11014621
2025/02/07
1090
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
程序员鹏磊
2018/01/11
1.5K0
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo
Docker入门 —— 在你进入容器世界之前,你需要知道什么
剧透:这篇文章是一个手把手的入门教程,所以准备好一杯茶和一张舒服的板凳,让我们开始创建一些容器吧。今天我们将学习Docker的基础知识,学习如何构建、运行和删除容器。
云原生
2021/05/31
1.2K0
Docker入门 —— 在你进入容器世界之前,你需要知道什么
面向初学者的Docker快速入门指南
yum源:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo为了速度可以替换文件中的url。
DevOps云学堂
2020/07/23
1.2K0
面向初学者的Docker快速入门指南
​Docker:从入门到实战过程全记录
想要真正理解Docker,就不得不从虚拟化技术的发展历程说起。普遍认为虚拟化技术经历了物理机时代、虚拟机时代,目前已经进入到了容器化时代。可以说,Docker是虚拟化技术不断发展的必然结果。
用户8949263
2022/11/07
7520
Ubuntu下通过docker部署springboot项目
右边有相应的版本,下载自己想要的版本(注:这里的java全部是openjdk,不是oracle jdk)。
吟风者
2019/07/25
1.4K0
Ubuntu下通过docker部署springboot项目
写给Java开发看的 Docker 干货(零基础部署Nginx MySQL SpringBoot)
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/29
1.1K0
写给Java开发看的 Docker 干货(零基础部署Nginx MySQL SpringBoot)
Docker Compose 1.18.0 之服务编排详解
一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器
程序员鹏磊
2018/01/18
1.5K0
Docker Compose 1.18.0 之服务编排详解
Docker容器
Docker利用容器来开发、运行应用。容器是镜像创建的实例。它可以被启动、开始、停止、删除。每个容器都是 相互隔离的、保证安全的平台。类似安装系统的电脑实体。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环 境)和跑在上面的应用。
清风穆云
2021/08/09
8580
十年失眠架构师教你使用Docker来构建、运行、发布微服务
原先,Docker只支持Linux环境下的安装。自从微软与Docker展开了深入合作之后,对于Windows平台的支持力度也加大了许多。目前,已经知道支持的Windows平台有Windows 10和Windows Server 2016。
愿天堂没有BUG
2022/10/28
4110
十年失眠架构师教你使用Docker来构建、运行、发布微服务
Docker 镜像与容器管理
镜像(Image): Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板.例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了一个应用程序,可以把它称为一个镜像,镜像是创建Docker容器的基础.通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用.
微软技术分享
2022/12/28
7990
相关推荐
Docker入门实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验