【docker】运行一个container

最近打算再深入玩玩docker,又回来学一学。

笑死4,5月还在开开心心玩docker,现在一看docker hub直接上不去了。

弄了半天,我还以为我的网络dns又出什么问题了,一看,镜像全给拆啦,哈哈哈哈。😅😅😅😅

插入点,我是发现一直用不了docker search 我以为网络有什么问题。

后面发现就别用docker search了,无论你怎么弄镜像就是搞不定的,墙直接封死了docker hub,search应该是默认去hub上面找的,所以search不到不代表镜像出什么问题了。

只要弄了镜像,能够pull就行。

docker

简单回顾什么是docker:最核心的概念,集装箱 。

一个涵盖了运行环境➕具体的软件需求。

以mysql举例,需要运行mysql,最简单的就是:相关的linux内核(运行环境)➕mysql软件(需求)

所以简单一点理解,docker一个集装箱包含了具体的软件以及基本的linux内核。

image && container && repository

镜像(image)与容器(container)比较好理解

可以简单的认为一个是集装箱的文件形态/非运行时态 (image )

另外一个就是集装箱的运行形态 (container)

仓库(repository)也好理解,就是远程放了一堆images,对他们进行管理,让大家都可以去上面下images

运行一个container

上面针对三者的解释,很容易感知到如果需要运行一个container,至少要有image,有了静态的,才能够动起来。

所以第一步需要获取image,两种方式。

  1. 去repo那边pull下来
  2. 自己用dockerfile build一个

pull比较简单,觉得需要啥,直接pull下来就可以了。

docker 里面针对image很看版本,除非是latest才可以省略,否则都不可以省略

bash 复制代码
docker pull redis[:version]

# 查看
docker images

dockerfile 构造

刚上手不太会,就会简单一点的。

一般配置一下字段,文件命名为Dockerfile即可,里面内容:

dockerfile 复制代码
# 从哪个image继承下来
FROM {image_name}[:version]

# 谁发布的
LABEL maintainer='{author_name}'

# 拷贝文件到image里面
COPY . ./web-back

# 构建image时候直接执行
RUN apt-get update && apt-get install vim -y

# 开放端口
EXPOSE 8000
bash 复制代码
docker build -t {image_name}[:version] {dockerfile_path}

弄完dockerfile 执行上面命令就会生成一个image,dockerfile_path可以写.就在当前目录找dockerfile

dockerfile 最头疼的就是这个copy。特别是这个路径,我是不太理解,但踩了n多雷,我自己的见解是
这个dockerfile在哪里,那个地方就认为是根目录 / 所以你在写copy时候,不能写../xxxxx,会找不到死活找不到copy文件在哪里

copy 默认文件夹是递归复制

container run

有了image就可以进行执行。

bash 复制代码
docker run --name {container_alias} -p {run_yourhost_port}:{container_inside_port} -itd {iamge_name}

短短一句话也全是问题...

name比较简单,就是给你接下来的container起个名字,后面执行用名字就可以了,就可以不用container ID

-itd 这个比较烦... 我暂时不是特别懂,-d比较简单,就是直接后台执行,如果不加-d相当于直接进入了容器内部的Linux,加上-d就是后台运行。

-it 文档是说明进行网络连接等等操作。。但我是一般用d执行但有时候容器启动不起来有时候得加it,也是不太懂原理,反正看着操作就行。

然后重量级的就是这个port ,表面看着平平无奇,但我感觉内部藏着docker的精髓...

说简单点我觉得就是将container内部的一个port将运行container的主机的port关联起来,将所有访问到这个主机的port全部转发到这个container的port去

  • 为什么需要转发?

因为,docker的一个container都涵盖了Linux内核 ,所以它实际上是一个虚拟机 ,他有自己的网络 ,有自己的内部端口 ,你在container运行的任何东西 ,实际上都运行在这个内部虚拟机 上面。所以任何需要访问这个container里面的服务,你都需进行port关联转发,才能够访问,如果不进行转发,会发现根本访问不到。

一般执行起来之后常用命令

bash 复制代码
# 查看容器执行状态
docker ps -a

# 只返回 container id
docker ps -aq

# 停止容器
docker stop {container ID / alias}

# 删除容器
docker rm {container ID / alias}

# 删除所有容器
docker rm `docker ps -aq`

# 进入container
docker exec -it {container ID / alias}
相关推荐
志栋智能8 小时前
安全超自动化如何支持快速安全扩容?
运维·服务器·数据库·架构·自动化
承渊政道10 小时前
星空组网+Python实战:在另一台电脑上查看CSV报表
运维·开发语言·python·csv·星空组网
木卫二号Coding15 小时前
推荐Linux统计文件大小并操作删除工具-ncdu
linux·运维·服务器
志栋智能16 小时前
超自动化运维:实现IT服务消费化的基础
运维·自动化
198******1263417 小时前
2026企业AI办公工具选型指南:从评估框架到场景适配
大数据·运维·人工智能
吴声子夜歌17 小时前
Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块)
运维·nginx·http
2601_9672127217 小时前
专利型电源轨道系统技术路线对比与选型框架
大数据·运维·网络·经验分享
数字化顾问18 小时前
(138页PPT)流程体系的建设优化与运营(附下载方式)
大数据·运维·人工智能
2601_9672875718 小时前
轮胎侧壁上的 91V 是什么意思,负荷指数与速度级别怎么看
运维·服务器·汽车
小此方19 小时前
Linux网络(十九):TCP流量控制与滑动窗口详解,超时重传和快重传到底有什么区别
linux·运维·服务器·网络·网络协议·tcp/ip