docker入门

admin
2023-03-14 / 0 评论 / 75 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年03月16日,已超过407天没有更新,若内容或图片失效,请留言反馈。

容器:一种打包技术。

docker:打包技术的一种技术实现。

一、基础知识

基础命令

  1. 查看docker相关信息

    docker versoin
  2. 查看docker环境信息

    docker info
  3. 查看命令帮助

    docker --help

image镜像

image是一个只读文件,里面包含文件系统、源码、可文件、依赖、工具等一些运行application所需的文件,可以理解成一个模板。docker image具有分层的概念。

container容器

一个运行中的“docker image”。是指是复制image并在image最上层加上一层读写的层。基于同一个image可以创建多个container。

image-20230314212421763

image获取方式

1、自己制作

2、从registry拉取,比如docker hub

创建容器

查看容器帮助命令

docker container --help

当没有拉取镜像时,会自动拉取。

查看当前运行了那些容器

docker container ls

image-20230314215351637

id:唯一的id。

image:使用的镜像。

command:执行的命令

created:创建时间,这里是2分钟之前。

status:状态

ports:端口协议

names: 容器名称,不设置时,随机产生一个。

创建容器:

docker container run 镜像命令

例如:创建nginx容器

dockekr container run nginx

image-20230314220114363

注意:此时是在窗口运行,ctrl+c会停止运行容器。

关闭容器

docker stop 容器名称或者容器id

例如:关闭nginx

查看容器信息:

docker container list

image-20230314220551379

关闭容器

docker container 7b51

image-20230314220657165

查看容器

查看运行中的容器

docker container list

查看创建过或者使用过的容器

docker container ps -a
或者
docker container ls -a

image-20230314221019289

区别:

ps是早点docker里面使用的参数,docker container --help里面看不到,只看得见list的参数。

删除容器

docker container rm 容器命令或者id

例如:删除nginx容器

docker container rm 7b

image-20230314221449250

注意

大部分的命令container是可以省略的。

例如:

创建容器:
docker run nginx

查看容器:
docker ps -a

停止容器:
docker stop nginx

删除容器:
docker rm nginx

建议,还是带上container,清晰表示是在对容器操作,因为后面还有对镜像image的操作。

二、小技巧

批量操作

比如:批量删除容器,如何操作?

正常情况删除容器

1、查看所有容器

docker container ls -a

2、删除多个容器

docker container rm 容器1的ID  容器2的ID  容器3的ID  容器4的ID

同时删除容器1、2、3、4。

但是如果有很多个,就可以通过参数传递批量删除。

批量删除

1、查看所有容器id

docker container ls -aq

image-20230314222601645

2、参数传递批量删除

docker container rm $(docker container ls -aq)

image-20230314222830471

批量关闭、删除同理。

注意

不能删除正在运行的容器。

删除运行中的容器

查看运行中的容器

docker container li

image-20230314223307558

直接删除

会提示容器正在运行不能删除。

docker container rm nginx

image-20230314223434454

删除运行中容器

1、停止容器,再删除。

停止
docker container stop 681
再删除
docker container rm 681

image-20230314223644214

2、强制删除容器

docker container rm c3e -f

注意:强制删除多个一个参数 -f

image-20230314223920083

三、docker两种运行模式

attached前台运行模式

docker container run -p 80:80 nginx

image-20230315214017630

ctrl+c

image-20230315214129891

在窗口创建容器后,界面输入创建容器日志,此时ctrl+c关闭后容器就关闭了。

查看容器

docker ps

image-20230315214152091

detached后台运行模式

只需要添加参数detached,简写一个d即可。

docker container run -d -p 80:80 nginx

image-20230315214331991

此时查看容器,依然在后台运行

docker ps

image-20230315214403472

进入容器

只需要加attach参数即可

docker container attach

image-20230315214711017

其实此时已经进入容器,访问nginx页面刷新,就可看到页面输出日志。

image-20230315214837478

此时执行ctrl+c,就会关闭容器。

ctrl+c

image-20230315215012703

查看容器已经关闭

docker ps

image-20230315215051208

注意:不推荐attach前台模式。

查看日志

后台运行模式detached,查看日志。

docker container logs 容器id或名称

例如查看nginx日志

docker container logs nginx

image-20230315215751266

动态跟踪日志

只需要加参数-f

docker container logs -f 容器id或名称

例如:动态跟踪nginx日志

docker container logs -f nginx

image-20230315220017261

交互式模式

1、用于执行创建容器后,执行的命令。只需要加参数-it

docker container run -it 容器名称 容器中要执行的命令

例如:创建ubunt容器后,执行sh脚本

docker container run -it ubuntu sh

image-20230315221948693

此时已经进入ubuntu的sh模式了,可以直接执行命令,查看ubuntu相关信息了。

image-20230315222117211

执行exit后执行退出ubuntu,并关闭了。因为我们是在交互模式,容器中执行的exit相当于关闭容器了。

image-20230315222244139

另一种进入交互模式办法。

2、exec

经常使用的容器交互方式

docker exec -it 容器名称/容器id sh

这样就进入了交互模式。

例如,进入nginx容器里面,执行相关操作。

docker exec -it nginx sh

image-20230315223027155

里面执行exit退出的是nginx的sh,并没有关闭nginx容器。这就是和上面没有exec参数的不同。

image-20230315223304507

注意:这是使用最频繁的命令。

四、容器运行了那些进程

docker top 容器名称/容器id

image-20230316220453478

可通过安装pstree查看进程关系树。

image-20230316223201617

可以看到创建一个docker容器,实际就是运行了一个脚本,而容器中又运行了其他进程子进程。

注意:容器中进程id和实际看到的id是不同的。

比如:创建busybox容器,进入容器内查看进程id。

docker container run -it busybox sh

查看进程

ps

image-20230316224110993

在容器外部执行查看容器进程命令:

docker container top fe0

image-20230316224200735

可以看到容器内部查看到的sh脚本进程和容器外部看到的sh脚本进程是不同的。

这是由于docker容器隔离形成。

五、docker容器运行背后发生了什么

以创建nginx容器为列:

docker container run -d -p 80:80 --name mynginx nginx

说明:

  1. 在本地查找是否有nginx镜像。如果有镜像,直接执行第4步骤。
  2. 如果本地没有,去远程image registry查找nginx镜像(默认registry是Docker Hub)
  3. 下载最新版本nginx镜像(默认nginx:latest)
  4. 基于nginx镜像来创建一个新的容器,并准备运行。
  5. docker engine引擎给这个容器分配一个虚拟ip地址。
  6. 在宿主机上打开80端口,并把容器的80端口转发到宿主机的80端口上。
  7. 启动容器,运行指定命令。(启动容器,其实就是执行一个脚本启动nginx)。
2

评论 (0)

取消