docker从0到0.5

docker从0到0.5

什么是docker

下面三样组成了docker的体系:

  • Dockerfile(配置文件):声明构建镜像时需要安装的依赖和要copy到镜像中的源码文件;类比Makefile
  • image(镜像):保存环境状态;正如anaconda的虚拟环境,不同的是anaconda中的环境是动态的,可以随时进行修改,而镜像是静态的,像个照片,只按Dockerfile的要求构建了需要的依赖
  • container(容器):运行image的内容,不同的container类比不同的进程,a不会干扰b的执行

它们之间的执行流程:

image-20230304100010214

docker和虚拟机有什么不同

docker 虚拟机
原理 提供docker引擎,所有容器共用一个内核,而又通过引擎在不同的操作系统中独立运行 模拟操作系统,每个虚拟机都有各自的完整内核
优势 更便于在不同环境测试脚本,比虚拟机轻量 具有完整的操作系统,可以对系统配置进行操作修改和练习

从Dockerfile到容器

Dockerfile->image

.是相对路径,这里说明是在Dockerfile指定的工作目录、根目录下进行构建

docker build .	// docker引擎查找Dockerfile并构建镜像

[-t],意为tag,可以在构建时直接命名镜像

docker build -t bisa/test:v1.0 .	

image

查看所有镜像

docker images	

会出现类似下面的显示:

image-20230304102400369

自定义镜像的名称

docker tag [IMAGE_ID] [REPOSITORY]:[TAG]
  • REPOSITORY:镜像的名字。如果想要把镜像上传到镜像仓库自己的账户里,通常用user/image_name的形式命名,user是账户名
  • TAG:版本号。如果不进行标注,则会默认为lateset,就像上图的hello-world一样

比如我想把hello-world重命名为hi-docker,tag为v1.0,并传到bisa的镜像仓库里:

docker tag feb bisa/hi-docker:v1.0	// 重命名
docker login						// 在本机上登录docker的账户(输入账户名和密码)
docker push bisa/hi-docker:v1.0		// 上传到镜像仓库

镜像的ID在镜像不多的时候可以只写前几位,只要能识别出是它就行

删除镜像(remove image:rmi)

当镜像相同时ID也会相同,可以用镜像名字指定要删除的镜像;下文中出现的所有名字都可以在id不冲突时用id代替

docker rmi -f bisa/hi-docker:v1.0

image->container

docker run [RESPOSITORY]
  • [-d],detached mode:使容器在后台运行,不占用当前命令行窗口

container

查看容器运行情况

docker ps		// 查看容器运行情况
docker ps -a	// 查看所有容器运行情况

给容器命名

否则随机给名字

docker run --name 容器名字 镜像名字

同步本地和容器

想把容器中的源码和本地同步,可以进行把本地的文件夹和容器中的文件夹进行绑定;注意这里的路径都要绝对路径

而有些文件是不能进行绑定的:本地的module文件会直接覆盖掉容器中的,而本地的文件没了,容器的文件也就没了

docker run -v 本地工作目录1:容器的工作目录1 镜像名字	// 绑定本地文件夹1和容器工作文件夹1
docker run -v 本地工作目录1:容器的工作目录1:ro -v 容器工作目录2 镜像名字	// 绑定本地文件夹1和容器工作文件夹1,但不同步容器工作目录2的内容,同时容器中的修改不可以影响本地
  • [-v],volume
  • [:ro],read_only

当重启容器的服务后,则可以看到绑定的变化

进入容器并进行交互

docker exec -it 容器名字 /bin/bash
  • exec,execute:类似docker run
  • [-i],interactive:交互
  • [-t],pseudo-TTY:伪终端
  • /bin/bash:执行一个新的bash

退出容器

exit

删除容器

docker rm -fv 容器名
  • [-f],force:强制删除,无论是否容器正在运行
  • [-v]:把对应的绑定也删除

端口号的对应问题

容器使用的端口号可能和本地所用的端口号不同,所以需要做端口映射

在Dockerfile中EXPOSS 端口号只是一个说明、给人看的,实际确定服务使用的端口还是由源码设置的

docker run -p 主机端口:容器端口 镜像名

docker_compose

用来做容器管理的,以免每次容器启动都要写一长串命令

创建docker-compose.yml,用于声明容器的配置。类似hexo搭博客的yml配置文件

启动容器

docker-compose up -d --build
  • [--build],会在yml修改时,按照镜像重建容器;不然还会使用原本容器的缓存

删除容器

docker-compose down -v
posted @ 2023-03-04 11:27  比萨在哭  阅读(19)  评论(0编辑  收藏  举报