我的第一个docker容器

本文介绍了 Docker 这一开源应用容器引擎,它能将应用及依赖打包到可移植容器,发布到 Linux 机器实现虚拟化。还阐述了 Docker 里仓库、镜像、容器的概念,给出拉取、查看镜像,运行、停止容器等命令,最后展示了创建简易 Docker 容器的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是docker,转自百度百科:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker里的三个概念:仓库 => 镜像 => 容器
从仓库中拉取镜像(images),运行镜像成为一个容器(本质上是一个进程)。
镜像与容器的关系类似java里的类和对象。

镜像在主机的存储利用了联合文件系统和分层存储机制(系统 => 镜像 => 容器)。镜像不可修改,容器可以修改,保证了一个镜像可以运行为多个不同的容器,独立运行且互不干扰。

拉取镜像命令:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS为参数,可运行docker pull --help来查看具体的参数及含义。[TAG]表示版本,默认为latest,最新版。NAME为容器名称。
我之前有过几篇文章从仓库拉取一些镜像,直接使用的docker run命令,如果本地没有这个镜像,会自动去仓库拉取,run命令包括了docker pull这个操作。

查看镜像命令:

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS为参数,也可通过help来查看不同参数的含义。REPOSITORY为镜像名称,TAG为版本。
比如我运行:

docker images rabbitmq:latest

就是查看最新版rabbitmq的镜像,在我这里结果为空,因为我没有这个镜像。

运行一个docker容器:

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

OPTIONS仍为参数,可以通过help查看。常用的几个参数有:
-d 后台运行容器
-p 将容器端口与主机端口进行映射
-e 运行时指定环境变量(x=y这种格式)
比如我运行我之前安装过的rabbitmq镜像命令如下:

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.7.3-management

-p我映射了两个端口,一个是rabbitmq端口,一个是管理界面的端口。镜像名称为rabbitmq,版本为3.7.3-management

在运行的容器中执行命令:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

CONTAINER为运行容器的id,可通过docker ps命令来查看。
比如进入nginx容器执行脚本,就可以用到exec命令了。

停止容器:

docker stop [OPTIONS] CONTAINER [CONTAINER...]

CONTAINER为运行容器的id,可通过docker ps命令来查看。

我的第一个简易docker容器

刚才说的镜像都是从docker仓库中拉取的,如果我们想把自己的代码发布到docker上,就要自己定义镜像,需要编写Dockerfile。Dockerfile是镜像制作的操作文件,也可以说是容器运行的说明书。

这里我使用了自己的一个简单的eureka单点工程,一个很简单的服务注册中心,application.yml如下:

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:8761/eureka/
    register-with-eureka: false
    fetch-registry: false
  server:
    enable-self-preservation: false
spring:
  application:
    name: eureka
server:
  port: 8761

我先在/etc/hosts文件中把本地ip映射到了eureka1上。
然后在IDEA自带的终端里运行mvn clean package -Dmaven.test.skip=true命令进行项目打包,跳过测试方法。

我在自己的虚拟机的/root目录下新建了一个目录,把jar包传到了里面,在jar包所在目录下运行vi Dockerfile对Dockerfile进行编写:

FROM java:8-alpine

ADD *.jar app.jar

EXPOSE 8761

ENTRYPOINT ["java","-jar","/app.jar"]

FROM java:8-alpine,该容器是springboot工程,需要依赖java运行环境,所以先把java的镜像引入进来,版本为8-alpine,然后将jar包添加到镜像中,因为目录下只有一个jar包,所以简写为 *.jar,镜像中的名称为app.jar。端口为8761,最后一行为运行jar包的命令。
运行docker build命令进行镜像制作:

docker build -t eurekademo1 .

镜像名称为eurekademo1,"."表示按照当前目录下的Dockerfile进行镜像生成。
我的环境里没有java镜像,所以docker会自动先去安装我指定版本的java镜像,然后进行生成,反正就很方便。

镜像生成后,运行:

docker run -d -p 8761:8761 eurekademo1

启动容器,端口为8761,镜像为eurekademo1。

执行docker imagesdocker ps来查看镜像和容器是否已存在。我比较懒,就不放截图了。
算了还是放吧,真香:
在这里插入图片描述
在这里插入图片描述

打开浏览器,输入虚拟机ip:8761访问eureka中心,容器运行成功:
在这里插入图片描述

我想看springboot在控制台中打印的日志,可以运行如下命令:

docker logs -f 55c2a005d0c6

其中55c2a005d0c6为我的容器id:
在这里插入图片描述

这样我的第一个简易docker容器就大功告成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值