Docker
Docker 是一个开源的应用容器引擎,基于Go语言开发
Docker 让开发者打包 应用以及依赖包 到一个轻量级、可移植的容器中,然后发布到任何流行的系统
优点
- 快速交付应用:加快打包时间,加快测试,加快发布,缩短开发及运行代码之间的周期
- 复杂环境管理,应用隔离:不同软件运行环境兼容依赖问题,开发环境/测试环境/线上环境保持一致
- 轻量级:对于系统内核,一个docker只是一个进程,一个系统可以运行上千个容器
Docker 与 虚拟机的区别
- 容器与容器之间只是进程的隔离,虚拟机是完全的资源隔离
- docker启动是秒级或者更短,虚拟机的启动可能需要分钟级别
- 容器使用宿主操作系统的内核,虚拟机使用完全独立的内核
Docker 架构
- Docker 镜像:Docker Images,每个镜像都可能依赖一个或多个下层的镜像组成的另一个镜像,AUFS文件系统
- Docker 仓库:Docker Registry,集中存放镜像的地方
- Docker 容器:Docker Containers,镜像运行后的进程
Docker 运行原理
底层原理
docker 如何工作?
Docker 是一个 Client-Server 结构的系统,docker守护进程运行在宿主机上,通过Socket从客户端访问。
DockerServer 接收 Client-Server 的指令
Docker 命令
常用命令
帮助文档地址:https://docs.docker.com/reference/
命令 | 说明 |
---|---|
基本命令 | |
docker version | docker 版本信息 |
docker info | docker 系统信息 |
docker --help | 帮助命令 |
— | |
镜像管理 | |
docker images | 查看所有镜像 |
docker search busybox | 搜索镜像 |
docker pull busybox:latest | 拉取下载 |
docker save busybox > busybox.tar | 导出 |
docker load < busybox.tar | 导入 |
docker rmi -f [busybox:latest] / [id] | 删除指定镜像 |
docker rmi -f $(docker images -aq) | 删除全部镜像 |
docker tag busybox:latest busybox:test | 更改镜像名 |
docker history busybox:latest | 查看镜像创建历史 |
— | |
容器管理 | |
docker run -d --name=busybox busybox:latest ping 114.114.114.114 | 运行容器 |
docker ps [-a] | 查看运行的容器 |
docker top busybox | 查看容器中运行的进程 |
docker stats busybox | 查看资源占用 |
docker start /restart /stop /kill busybox | 容器 |
docker pause / unpause busybox | 暂停容器 |
docker rm -f busybox | 强制删除容器 |
docker exec -it busybox ls | 执行命令 |
docker exec -it {容器名称} /bin/bash | 进入容器 |
docker cp busybox:/etc/hosts hosts | 复制文件 |
docker logs -f busybox | 查看容器日志 |
docker inspect busybox | 查看容器/镜像 元信息 |
docker inspect -f ‘{ {.Id}}’ busybox | 格式化输出 |
docker diff busybox | 查看容器内文件结构 |
容器命令
新建容器并启动:
docker run [可选参数] image
参数:
--name=[name] 容器名字
-d 后台运行
-it 交互式运行,进入容器查看内容
-p 指定容器端口 -p 8080:8080
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
测试:
启动并进入容器
[root@localhost docker]# docker run -it centos /bin/bash
[root@0d6bc51c1a81 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
从容器退回主机 (停止运行容器退出)
[root@0d6bc51c1a81 /]# exit
exit
[root@localhost docker]#
不停止运行退出exit
Ctrl+P+Q
[root@f3116e051806 /]# [root@localhost docker]#
列出运行的容器
docker ps [可选参数] 列出当前正在运行的容器
参数:
-a 列出当前运行的容器+历史运行过的容器
-n=<数字> 列出最新创建的前n个容器
-q 只列出当前运行的容器编号
-aq 列出当前运行以及运行过的容器编号
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d6bc51c1a81 centos "/bin/bash" 3 minutes ago Exited (0) About a minute ago gracious_euler
b2dd66d87998 centos "/bin/bash" 3 minutes ago Exited (130) 3 minutes ago boring_pascal
dc669bca69f5 hello-world "/hello" About an hour ago Exited (0) About an hour ago peaceful_morse
3575d3e83144 jenkins/jenkins:lts "/sbin/tini -- /usr/…" 5 days ago Exited (143) 2 days ago jenkins2
cc774ec82fb2 bitnami/mariadb:10.3.22 "/opt/bitnami/script…" 6 days ago Exited (1) 6 days ago mariadb
e4cfb8d38359 nginx:1.17.9 "nginx -g 'daemon of…" 6 days ago Exited (0) 5 days ago my_nginx
[root@localhost docker]#
删除容器
docker rm 容器id 删除指定的容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq) 删除所有的容器
docker ps -a -q |xargs docker rm 删除所有容器
启动,停止容器
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前运行的容器
常用其他命令
后台启动容器