docker入门及常用命令

本文介绍了Docker相关知识,它是基于Go语言的开源应用容器引擎,能将应用及依赖打包到轻量级容器。阐述了镜像来源,可从docker hub拉取或由Dockerfile生成,还说明了用镜像启动容器、容器网络模式及常用命令,如docker build、docker run等。

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

docker 是什么

Docker 是一个基于Go语言开源的应用容器引擎。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器相当于一个个彼此隔离的沙箱,开销极低。

相比于vm,docker没有操作系统(也有说法是只提供最基本的操作),容器内的应用直接在宿主机上运行。耗费的系统资源更少,启动更快。

镜像是怎么来的

docker中有两个重要的概念,镜像和容器。其中,镜像是一个封装了依赖和资源的特殊的文件系统,容器则是镜像的一个实例,是一个运行于自己的命名空间中的独立进程。数据存储在容器中,使用容器的生命周期。

镜像是可以一层一层叠加的,子镜像会继承父层镜像的配置,在此基础上添加修改形成自己的特性。

从ducker hub上拉一个

docker-hub上存在众多已经配好的镜像,使用方法类似git,docker pull 即可获取。

从Dockerfile生成

a目录在有DockerFile文件,那么在a目录下 docker build 即可获得一个根据该dockerfile生成的镜像。

以下就是一个express服务的dockerfile。

FROM node:10

WORKDIR /Users/xuemengge/playground

COPY package*.json ./

RUN npm ci --only=production

COPY . .

EXPOSE 5556

CMD node server.js

用镜像run一个容器

有了镜像, docker run <imagename> <cmd>即可根据镜像启动容器。imagename可以通过docker images获得。docker run的参数比较多。参见下一节。

启动容器后,可以通过docker ps来看所有运行态的容器,如果加了-a参数,还可以看到已经停止的容器。

容器可以通过docker stopdocker restart来停止和重启

容器的网络模式

看了下我司在Jenkins上的配置,docker run的时候都会加上参数–net=host。这是什么意思呢?

这代表容器处于网络模式下,此时docker不会为容器创建单独的网络网络,而是共享主机的网络。也就是说,容器暴露出什么端口,主机就直接监听的是什么端口。这种配置比起配-p映射要更直接。适用于知道主机上有哪些容器的项目。否则很容易起冲突。

常用命令

docker build

docker build [OPTIONS] PATH | URL | -

  • -f :指定要使用的Dockerfile路径
  • –tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • –pull :尝试去更新镜像的新版本;

例如docker build -t runoob/ubuntu:v1 .,代表使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1。

docker run

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

  • -i: 以交互模式运行容器,通常与 -t 同时使用

  • -P: 随机端口映射,容器内部端口随机映射到主机的高端口

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

  • –t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用, -it

  • –name=“nginx”: 命名容器

  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

docker exec 在运行的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG…]

  • it 跟docker run的-it一样,都是给一个交互式输入终端

docker exec -it 9df70f9a0714 bash
docker exec -it 9df70f9a0714 /bin/bash
通过exec命令进入容器中并执行bash

这篇文章写得原理不错,值得一看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值