【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}
相关推荐
文人sec9 分钟前
泷羽sec学习打卡-Linux基础
linux·运维·网络·学习·安全·web安全
Ops菜鸟(Xu JieHao)11 分钟前
Dockerfile构建镜像(练习一Apache镜像)(5-1)
服务器·docker·容器·apache·脚本·dockerfile·系统运维
小徐敲java13 分钟前
docker 安装mongodb
mongodb·docker·容器
汪小敏同学31 分钟前
docker网络配置:bridge模式、host模式、container模式、none模式
docker
皮锤打乌龟33 分钟前
Jenkins常用插件
运维·jenkins
minos.cpp37 分钟前
ubuntu 22.04 镜像源更换
linux·运维·ubuntu
运维&陈同学39 分钟前
【HAProxy08】企业级反向代理HAProxy高级功能之自定义日志格式与IP透传
linux·运维·nginx·云原生·负载均衡·lvs·haproxy·反向代理
努力成为DBA的小王44 分钟前
Linux(光速安装+centos镜像 图片+大白话)
linux·运维·服务器·学习·centos
IPFoxy6661 小时前
Facebook定位不准是什么原因?
运维·服务器
zhangxueyi1 小时前
Tomcat与Nginx之全面比较
linux·运维·服务器·nginx·tomcat