What is docker
A platform for building,running and shipping applications:是一个构建运行的平台并以一致的方法发送应用程序。可以轻松的将我们的应用程序与它所需要的一切打包在一起,并在任何有docker的机器使用它。
- 隔离环境允许多个应用程序使用,某些软件不同版本并排(一个节点9,一个节点14),不会互相弄乱。不再使用它时,可以删除应用程序。
- Consistently build,run and ship applicaitons
Virtual Machines vs Containers
Containers : An isolated environment for running an application
- Allow running multiple apps in isolation
- Are lightweight
- Use OS of the host(shared system)
- start quicker(Usually a second)
- Need less hardware resources(don not need to assign specific disk or memory)
Virtual Machines : An abstraction of a machine(physical hardware)
Hypervisor:
- VirtualBox
- VMware
- Hyper-v(Windows only)
作用:Run application in isolation
Problems:
- Each VM needs a full-blown OS
- Slow to start
- Resource intensive(physics resource,like cpu,memory,disk…)
Architecture of Docker
Docker use client-server architecture,it has a client-component and restful api server component
essence:
A kernel manages application and hardware resource
different system core:
Installing Docker
docker hub or aliyun
IMAGE:
- A cut-down OS
- A runtime environment(eg Node)
- Application files
- Third-party libraries
- Environment variables
Building an image of an application are written in a docker file that we can package up our application into a image
Docker architecture
Development Workflow
常用命令
# 帮助命令
[root@iZf8zirbfebziiuh71055zZ /]# docker 命令--help
# Search命令
[root@iZf8zirbfebziiuh71055zZ /]#docker search mysql
# 镜像命令
[root@iZf8zirbfebziiuh71055zZ /]# docker pull mysql:8.0.27
> #删除镜像
# 删除指定的容器
[root@iZf8zirbfebziiuh71055zZ /]# docker rmi -f 容器id
# 删除多个容器
[root@iZf8zirbfebziiuh71055zZ /]# docker rmi -f 容器id1 容器id2 容器id3
# 批量删除容器
[root@iZf8zirbfebziiuh71055zZ /]# docker rmi -f $(docker images -aq)
容器命令
有镜像了才有容器,linux,下载一个contos镜像来测试
docker pull centos
新建容器并启动
root@iZf8zirbfebziiuh71055zZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.27 3218b38490ce 3 days ago 516MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
centos latest 5d0da3dc9764 3 months ago 231MB
#启动并进入容器(开一个容器)
[root@iZf8zirbfebziiuh71055zZ /]# docker run -it centos /bin/bash
[root@c9416b31cbdd /]#
[root@c9416b31cbdd /]# ls #查看容器centos,
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#退出容器
[root@c9416b31cbdd /]# exit
exit
[root@iZf8zirbfebziiuh71055zZ /]# ls
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var
docker ps -options
//列出正在运行的容器
[root@iZf8zirbfebziiuh71055zZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 列出正在运行的容器+历史容器运行记录
[root@iZf8zirbfebziiuh71055zZ /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9416b31cbdd centos "/bin/bash" 12 minutes ago Exited (0) 8 minutes ago agitated_bartik
3cfb8cabb443 hello-world "/hello" About an hour ago Exited (0) About an hour ago adoring_payne
ece492f0c3ff hello-world "/hello" About an hour ago Exited (0) About an hour ago loving_driscoll
# 看最近的一条
[root@iZf8zirbfebziiuh71055zZ /]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9416b31cbdd centos "/bin/bash" 18 minutes ago Exited (0) 14 minutes ago agitated_bartik
退出容器
exit #退出并停止容器
Ctrl + p +q #退出不停止容器
删除容器
docker rm 容器id #删除指定容器
docker rm -f 容器 id #强制删除(包括正在运行的容器)
docker rm -f $(docker ps -a -q) #删除全部容器
docker ps -a -q|xargs docker rm #删除全部容器
启动和停止容器
docker start 容器ID #启动
docker restart 容器id #重启当前正在运行的容器
docker stop 容器id #停止
docker kill 容器id #强制停止
后台启动容器
docker run -d centos #后台启动容器
[root@iZf8zirbfebziiuh71055zZ /]# docker run -d centos
8c92ec720f6460ad904c3e271ce2a5513e318f1a49ab3e6c5a31c3210f9840da
#docker ps 发现centos停止了
常见的坑:容器使用后台运行,就必须有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有服提供服务,就会立即停止
[root@iZf8zirbfebziiuh71055zZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看日志
docker logs -f -t --tail 容器id #查看容器的日志
[root@iZf8zirbfebziiuh71055zZ /]# docker logs -f -t --tail 5d0da3dc9764
"docker logs" requires exactly 1 argument.
See 'docker logs --help'.
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
# 发现容器未启动,启动容器
[root@iZf8zirbfebziiuh71055zZ /]# docker run -it centos /bin/bash
[root@8117337aa6b9 /]# #使用ctrl+p+q 退出来,且不关闭容器
# 因容器没有东西,自动关闭,写入数据
[root@iZf8zirbfebziiuh71055zZ /]# docker run -d centos /bin/sh -c "while true;do echo wxj ;sleep 1;done"
4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14
[root@iZf8zirbfebziiuh71055zZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f12bf857d6b centos "/bin/sh -c 'while t…" 24 seconds ago Up 23 seconds quirky_wu
[root@iZf8zirbfebziiuh71055zZ /]# docker logs -f -t 4f12bf857d6b #查看全部日志
[root@iZf8zirbfebziiuh71055zZ /]# docker logs -f -t --tail 10 4f12bf857d6b #查看十条日志
2-24T06:21:43.189053970Z wxj
2021-12-24T06:21:44.191090421Z wxj
2021-12-24T06:21:45.193158591Z wxj
2021-12-24T06:21:46.195195444Z wxj
2021-12-24T06:21:47.197205465Z wxj
2021-12-24T06:21:48.199200023Z wxj
2021-12-24T06:21:49.201269126Z wxj
2021-12-24T06:21:50.203297803Z wxj
2021-12-24T06:21:51.205127178
查看容器进程信息
[root@iZf8zirbfebziiuh71055zZ /]# docker top 4f12bf857d6b
查看
[root@iZf8zirbfebziiuh71055zZ /]# docker inspect 4f12bf857d6b
[
{
"Id": "4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14",
"Created": "2021-12-24T06:19:41.713312099Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo wxj ;sleep 1;done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2021-12-24T06:19:41.94285143Z",
"FinishedAt": "2021-12-24T06:23:50.102028795Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14/hostname",
"HostsPath": "/var/lib/docker/containers/4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14/hosts",
"LogPath": "/var/lib/docker/containers/4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14/4f12bf857d6b33c009347794c162d795b6a2c011c4a6c38de18c3aff4c727a14-json.log",
"Name": "/quirky_wu",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "host",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,