Container:一种打包技术。

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

一、基础知识

基础命令

  1. 查看docker相关信息

    docker versoin
  2. 查看docker环境信息

    docker info
  3. 查看命令帮助

    docker --help

image镜像

image是一个只读File,里面包含File系统、Source Code、可File、Dependency、Tools等一些Runapplication所需的File,可以理解成一个模板。docker image具有分层的概念。

container容器

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

image-20230314212421763

image获取方式

1、自己制作

2、从registryPull,比如docker hub

创建容器

ViewContainer帮助Command

docker container --help

当没有PullImage时,会自动Pull。

View当前Run了那些Container

docker container ls

image-20230314215351637

id:唯一的id。

image:Usage的Image。

command:Execute的Command

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

status:状态

ports:端口协议

names: Container名称,不Settings时,随机产生一个。

CreateContainer:

docker container run 镜像命令

例如:CreatenginxContainer

dockekr container run nginx

image-20230314220114363

注意:此时是在窗口Run,ctrl+c会停止RunContainer。

关闭容器

docker stop 容器名称或者容器id

例如:关闭nginx

ViewContainer信息:

docker container list

image-20230314220551379

关闭Container

docker container 7b51

image-20230314220657165

查看容器

ViewRun中的Container

docker container list

ViewCreate过或者Usage过的Container

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

image-20230314221019289

区别:

ps是早点docker里面Usage的Parameter,docker container —help里面看不到,只看得见list的Parameter。

删除容器

docker container rm 容器命令或者id

例如:删除nginxContainer

docker container rm 7b

image-20230314221449250

注意

大部分的Commandcontainer是可以省略的。

例如:

创建容器:
docker run nginx

查看容器:
docker ps -a

停止容器:
docker stop nginx

删除容器:
docker rm nginx

建议,还是带上container,清晰表示是在对Container操作,因为后面还有对Imageimage的操作。

二、小技巧

批量操作

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

正常情况删除Container

1、View所有Container

docker container ls -a

2、删除多个Container

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

同时删除Container1、2、3、4。

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

批量删除

1、View所有Containerid

docker container ls -aq

image-20230314222601645

2、Parameter传递批量删除

docker container rm $(docker container ls -aq)

image-20230314222830471

批量关闭、删除同理。

注意

不能删除正在Run的Container。

删除运行中的容器

ViewRun中的Container

docker container li

image-20230314223307558

直接删除

会提示Container正在Run不能删除。

docker container rm nginx

image-20230314223434454

删除Run中Container

1、停止Container,再删除。

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

image-20230314223644214

2、强制删除Container

docker container rm c3e -f

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

image-20230314223920083

三、docker两种运行模式

attached前台运行模式

docker container run -p 80:80 nginx

image-20230315214017630

ctrl+c

image-20230315214129891

在窗口CreateContainer后,界面输入CreateContainerLogging,此时ctrl+c关闭后Container就关闭了。

ViewContainer

docker ps

image-20230315214152091

detached后台运行模式

只需要添加Parameterdetached,简写一个d即可。

docker container run -d -p 80:80 nginx

image-20230315214331991

此时ViewContainer,依然在后台Run

docker ps

image-20230315214403472

进入容器

只需要加attachParameter即可

docker container attach

image-20230315214711017

其实此时已经进入Container,访问nginx页面刷新,就可看到页面输出Logging。

image-20230315214837478

此时Executectrl+c,就会关闭Container。

ctrl+c

image-20230315215012703

ViewContainer已经关闭

docker ps

image-20230315215051208

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

查看日志

后台RunPatterndetached,ViewLogging。

docker container logs 容器id或名称

例如ViewnginxLogging

docker container logs nginx

image-20230315215751266

动态跟踪日志

只需要加Parameter-f

docker container logs -f 容器id或名称

例如:动态跟踪nginxLogging

docker container logs -f nginx

image-20230315220017261

交互式模式

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

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

例如:CreateubuntContainer后,ExecuteshScript

docker container run -it ubuntu sh

image-20230315221948693

此时已经进入ubuntu的shPattern了,可以直接ExecuteCommand,Viewubuntu相关信息了。

image-20230315222117211

Executeexit后Execute退出ubuntu,并关闭了。因为我们是在交互Pattern,Container中Execute的exit相当于关闭Container了。

image-20230315222244139

另一种进入交互Pattern办法。

2、exec

经常Usage的Container交互方式

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

这样就进入了交互Pattern。

例如,进入nginxContainer里面,Execute相关操作。

docker exec -it nginx sh

image-20230315223027155

里面Executeexit退出的是nginx的sh,并没有关闭nginxContainer。这就是和上面没有execParameter的不同。

image-20230315223304507

注意:这是Usage最频繁的Command。

四、容器运行了那些进程

docker top 容器名称/容器id

image-20230316220453478

可通过InstallationpstreeView进程关系树。

image-20230316223201617

可以看到Create一个dockerContainer,实际就是Run了一个Script,而Container中又Run了其他进程子进程。

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

比如:CreatebusyboxContainer,进入Container内View进程id。

docker container run -it busybox sh

View进程

ps

image-20230316224110993

在Container外部ExecuteViewContainer进程Command:

docker container top fe0

image-20230316224200735

可以看到Container内部View到的shScript进程和Container外部看到的shScript进程是不同的。

这是由于dockerContainer隔离形成。

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

以CreatenginxContainer为列:

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)。