【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}
相关推荐
深圳安锐科技有限公司13 分钟前
首次接触结构安全自动化监测系统,价格高吗?后期维护?
运维·自动化
冬天vs不冷20 分钟前
Linux用户与权限管理详解
linux·运维·chrome
凯子坚持 c1 小时前
深入Linux权限体系:守护系统安全的第一道防线
linux·运维·系统安全
大熊程序猿1 小时前
K8s证书过期
云原生·容器·kubernetes
摸鱼也很难4 小时前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛5 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程6 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
鸠摩智首席音效师7 小时前
Docker 中如何限制CPU和内存的使用 ?
docker·容器
Michaelwubo7 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器