Introduction to Docker
Container:一种打包技术。
docker:打包技术的一种技术实现。
一、基础知识
基础命令
-
查看docker相关信息
docker versoin -
查看docker环境信息
docker info -
查看命令帮助
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获取方式
1、自己制作
2、从registryPull,比如docker hub
创建容器
ViewContainer帮助Command
docker container --help
当没有PullImage时,会自动Pull。
View当前Run了那些Container:
docker container ls

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

注意:此时是在窗口Run,ctrl+c会停止RunContainer。
关闭容器
docker stop 容器名称或者容器id
例如:关闭nginx
ViewContainer信息:
docker container list

关闭Container:
docker container 7b51

查看容器
ViewRun中的Container
docker container list
ViewCreate过或者Usage过的Container
docker container ps -a
或者
docker container ls -a

区别:
ps是早点docker里面Usage的Parameter,docker container —help里面看不到,只看得见list的Parameter。
删除容器
docker container rm 容器命令或者id
例如:删除nginxContainer
docker container rm 7b

注意
大部分的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

2、Parameter传递批量删除
docker container rm $(docker container ls -aq)

批量关闭、删除同理。
注意
不能删除正在Run的Container。
删除运行中的容器
ViewRun中的Container
docker container li

直接删除
会提示Container正在Run不能删除。
docker container rm nginx

删除Run中Container
1、停止Container,再删除。
停止
docker container stop 681
再删除
docker container rm 681

2、强制删除Container
docker container rm c3e -f
注意:强制删除多个一个Parameter -f

三、docker两种运行模式
attached前台运行模式
docker container run -p 80:80 nginx

ctrl+c

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

detached后台运行模式
只需要添加Parameterdetached,简写一个d即可。
docker container run -d -p 80:80 nginx

此时ViewContainer,依然在后台Run
docker ps

进入容器
只需要加attachParameter即可
docker container attach

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

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

ViewContainer已经关闭
docker ps

注意:不推荐attach前台模式。
查看日志
后台RunPatterndetached,ViewLogging。
docker container logs 容器id或名称
例如ViewnginxLogging
docker container logs nginx

动态跟踪日志
只需要加Parameter-f
docker container logs -f 容器id或名称
例如:动态跟踪nginxLogging
docker container logs -f nginx

交互式模式
1、用于执行创建容器后,执行的命令。只需要加参数-it
docker container run -it 容器名称 容器中要执行的命令
例如:CreateubuntContainer后,ExecuteshScript
docker container run -it ubuntu sh

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

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

另一种进入交互Pattern办法。
2、exec
经常Usage的Container交互方式
docker exec -it 容器名称/容器id sh
这样就进入了交互Pattern。
例如,进入nginxContainer里面,Execute相关操作。
docker exec -it nginx sh

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

注意:这是Usage最频繁的Command。
四、容器运行了那些进程
docker top 容器名称/容器id

可通过InstallationpstreeView进程关系树。

可以看到Create一个dockerContainer,实际就是Run了一个Script,而Container中又Run了其他进程子进程。
注意:Container中进程id和实际看到的id是不同的。
比如:CreatebusyboxContainer,进入Container内View进程id。
docker container run -it busybox sh
View进程
ps

在Container外部ExecuteViewContainer进程Command:
docker container top fe0

可以看到Container内部View到的shScript进程和Container外部看到的shScript进程是不同的。
这是由于dockerContainer隔离形成。
五、docker容器运行背后发生了什么
以CreatenginxContainer为列:
docker container run -d -p 80:80 --name mynginx nginx
说明:
-
在本地查找是否有nginx镜像。如果有镜像,直接执行第4步骤。
-
如果本地没有,去远程image registry查找nginx镜像(默认registry是Docker Hub)
-
下载最新版本nginx镜像(默认nginx:latest)
-
基于nginx镜像来创建一个新的容器,并准备运行。
-
docker engine引擎给这个容器分配一个虚拟ip地址。
-
在宿主机上打开80端口,并把容器的80端口转发到宿主机的80端口上。
-
启动容器,运行指定命令。(启动容器,其实就是执行一个脚本启动nginx)。