一个完整的 Docker 有以下几个部分组成:
dockerClient 客户端
Docker Daemon 守护进程
Docker Image 镜像
DockerContainer 容器
容器:
存储, 运输工具
实现对容器内部的物品实现包含(实现了一个相对隔离的环境)
容器: 模拟 (虚拟) 出一个相对隔离的空间
镜像:
用来创建容器的模版, 放在镜像仓库中, 例如 nginx,Redis,httpd 等
Docker 与 Kvm 的对比
kvm:
1. 虚拟机
2. 使用复杂
3. 启动过程相对慢(分钟)
4. 模版文件较大
5. 和物理完全隔离
6. 模拟的是一个完整系统, 可以登录并实现管理
docker:
1. 直接虚拟出来一个用户空间
2. 使用简单
3. 启动非常块(秒级)
4. 模版文件很小
5. 在一定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间, 不方便管理
Docker 使用理由
1. 快速部署服务
2. 实现隔离
3. 让一个主机运行多个容器
4. 提高开发效率
5. 简化配置过程
6. 实现软件的跨平台
Docker 镜像加速配置
第一步: 打开阿里云网站
https://www.aliyun.com/?utm_content=se_1000301910
第二步: 进行阿里云注册
略
第三步: 点击控制台
第四步: 点击产品与服务>镜像与服务
第五步: 点击镜像加速器, 记住自己的加速器地址
Docker 的安装与配置
安装 docker 需要配置网络 yum 源, centos7 自带的版本太低了
第一步: 下载阿里云的 docker 安装包
在 yum 仓库的目录之下
[[email protected] yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
还需要使用到 extra 和 epel 源
- [extra]
- name=CentOS extra
- enabled=1
- gpgcheck=0
- baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
- [epel]
- name=epel
- enabled=1
- gpgcheck=0
- baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第二步: 使用 yum 即可进行安装
docker-ce 是社区版, 是免费的
docker-ee 是企业版, 是收费的
这里我们下载社区版的
[[email protected] ~]# yum install docker-ce -y
第三步: 添加加速器地址
把刚才注册得到的镜像加速地址如下步骤填写进去
- [[email protected] ~]# mkdir /etc/docker
- [[email protected] ~]# cat /etc/docker/daemon.JSON
- {
- "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
- }
第四步: 重启 docker
[[email protected] ~]# systemctl restart docker
Docker 有关镜像的操作命令详解
第一步: 获取镜像的使用帮助
- [[email protected] ~]# docker image --help
- Usage: docker image COMMAND
- Manage images
第二步: docker 镜像的使用命令详解
build 从 docker 文件里面创建镜像
history 显示一个镜像的历史
import 从归档文件中创建镜像
inspect 显示一个一个或多个镜像的详细信息
load 加载一个镜像从 tar 压缩包或者标准输入
ls 列出镜像
prune 移除没有被使用的镜像
pull 从注册处拉取一个镜像或者镜像库
push 把一个镜像或者镜像库推送至注册处
rm 移除一个或多个镜像
save 保存一个或者多个镜像到 tar 压缩包, 默认情况下流式传输到
tag 创建一个引用 SOURCE_IMAGE 的标记 TARGET_IMAGE
Docker 镜像的操作命令演示
一. 查看注册表中是否有 nginx 镜像
- [[email protected] ~]# docker search nginx
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- nginx Official build of Nginx. 10326 [OK]
- jwilder/nginx-proxy Automated Nginx reverse proxy for docker con?? 1471 [OK]
- richarvey/nginx-PHP-fpm Container running Nginx + PHP-FPM capable of?? 650 [OK]
- jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p?? 441 [OK]
- kong Open-source Microservice & API Management la?? 249 [OK]
- webdevops/PHP-nginx Nginx with PHP-FPM 117 [OK]
- kitematic/hello-world-nginx A light-weight nginx container that demonstr?? 112
- ...
二. 下载 nginx 镜像
[[email protected] ~]# docker image pull nginx
三: 查看本地镜像
- [[email protected] ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest e81eb098537d 10 days ago 109MB
四: 导入镜像
这里我准备了一个 Redis 的镜像压缩包
这样就获取到了 Redis 的镜像
压缩包不需要解压
- [[email protected] ~]# docker image load <redis_img.tar.gz
- d626a8ad97a1: Loading layer [==================================================>] 58.46MB/58.46MB
- fd0ff4158c63: Loading layer [==================================================>] 338.4kB/338.4kB
- f1e69ab74fb6: Loading layer [==================================================>] 3.034MB/3.034MB
- 5935063a73de: Loading layer [==================================================>] 24.83MB/24.83MB
- 72ebea29957d: Loading layer [==================================================>] 1.536kB/1.536kB
- 56631ad86187: Loading layer [==================================================>] 3.584kB/3.584kB
- Loaded image: Redis:latest
- [[email protected] ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest e81eb098537d 10 days ago 109MB
- Redis latest 55cb7014c24f 5 months ago 83.4MB
- [[email protected] ~]#
五: 镜像导出
写成压缩包的形式
- [[email protected] ~]# docker image save nginx> /tmp/nginx.tar.gz
- [[email protected] ~]# ls /tmp/nginx.tar.gz
- /tmp/nginx.tar.gz
六: 显示 nginx 镜像的详细信息
- [[email protected] ~]# docker inspect nginx
- [
- {
- "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
- "RepoTags": [
- "nginx:latest"
- ],
- "RepoDigests": [
- "[email protected]:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
- ],
- "Parent": "",
- "Comment": "",
- "Created": "2018-11-16T13:32:10.147294787Z",
- "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
- "ContainerConfig": {
- "Hostname": "d4fa15093ad8",
- "Domainname": "",
- "User": "",
- "AttachStdin": false,
- "AttachStdout": false,
- "AttachStderr": false,
- "ExposedPorts": {
- ...
七: 删除 nginx 的镜像
- [[email protected] ~]# docker image rm nginx
- Untagged: nginx:latest
- Untagged: [email protected]:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
- Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
- Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
- Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
- Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
- [[email protected] ~]# docker image ls
- REPOSITORY TAG IMAGE ID CREATED SIZE
- Redis latest 55cb7014c24f 5 months ago 83.4MB
Docker 有关容器的操作命令详解
第一步: 获取容器的命令的使用帮助
- [[email protected] ~]# docker container --help
- Usage: docker container COMMAND
- Manage containers
第二步: docker 容器的使用命令详解
attach 将本地标准输入, 输出和错误流附加到正在运行的容器
commit 根据容器的更改创建新镜像
cp 在容器和本地文件系统之间复制文件 / 文件夹
create 创建一个新的容器
diff 检查容器文件系统上的文件或目录的更改
exec 在正在运行的容器中运行命令
export 将容器的文件系统导出为 tar 存档
inspect 显示一个或多个容器的详细信息
kill 杀死一个或多个正在运行的容器
logs 获取容器的日志
ls 列出容器
pause 暂停一个或多个容器中的所有进程
port 列出端口映射或容器的特定映射
prune 删除所有已停止的容器
rename 重命名容器
restart 重启一个或多个容器
rm 删除一个或多个容器
run 在新容器中运行命令
start 启动一个或多个已停止的容器
stats 显示容器资源使用情况统计信息的实时流
stop 停止一个或多个正在运行的容器
top 显示容器的运行进程
unpause 取消暂停一个或多个容器中的所有进程
update 更新一个或多个容器的配置
wait 等待, 直到一个或多个容器停止, 然后打印退出代码
Docker 容器的操作命令演示
一. 启动 Redis 容器
-name: 指定容器名字
-d: 表示后台运行
- [[email protected] ~]# docker container run --name redis1 -d Redis
- 4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd
二. 查看容器
使用 ls
- [[email protected] ~]# docker container ls
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? 39 seconds ago Up 38 seconds 6379/tcp redis1
三. 查看所有的容器
ps -a: 列出所有的容器包括运行和停止的
ps: 仅仅列出正在运行的
- [[email protected] ~]# docker container ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? About a minute ago Up About a minute 6379/tcp redis1
- 054bc8b8aab7 Redis "docker-entrypoint.s?? 2 minutes ago Exited (0) 2 minutes ago confident_goldstine
四. 查看容器的详细信息
inspect 后面加上容器名字即可获取有关容器的详细信息
- [[email protected] ~]# docker container inspect redis1
- [
- {
- "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
- "Created": "2018-11-26T20:22:23.099937767Z",
- "Path": "docker-entrypoint.sh",
- "Args": [
- "redis-server"
- ],
- "State": {
- "Status": "running",
- "Running": true,
- "Paused": false,
- "Restarting": false,
- "OOMKilled": false,
- "Dead": false,
- ...
五. 停止容器
使用 stop
- [[email protected] ~]# docker container stop redis1
- redis1
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
六. 启动容器
使用 start
- [[email protected] ~]# docker container start redis1
- redis1
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? 8 minutes ago Up 1 second 6379/tcp redis1
七. 登录容器
第一种方法:
exec -it 容器名 /bin/sh
-i: 表示启动为交互模式
-t: 表示分配一个终端
登录进去之后发现我们可以执行有挂 Redis 的命令了
- [[email protected] ~]# docker container exec -i -t redis1 /bin/sh
- #
- #
- # Redis-cli
- 127.0.0.1:6379> set ken 520
- OK
- 127.0.0.1:6379> get ken
- "520"
退出之后容器没有停止
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? 13 minutes ago Up 4 minutes 6379/tcp redis1
第二种方法:
attach: 会导致当退出的时候, 自动停止容器
不建议使用
- [[email protected] ~]# docker container attach redis1
- ^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown...
- 1:M 26 Nov 20:36:44.315 # User requested shutdown...
- 1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting.
- 1:M 26 Nov 20:36:44.327 * DB saved on disk
- 1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye...
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第三种方法:
基于 nsenter 进入
第一步: 启动容器
- [[email protected] ~]# docker container start redis1
- redis1
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? 16 minutes ago Up 6 seconds 6379/tcp redis1
第二步: 获取容器的 pid
- [[email protected] ~]# docker container inspect -f '{{.State.Pid}}' redis1
- 6036
第三步: 登录容器
-t: 从中获取名称空间的目标进程
-u: 输入 UTS 名称空间(主机名等)
-i: 进入 System V IPC 命名空间
-n: 输入网络命名空间
-p: 输入 pid 命名空间
- [[email protected] ~]# nsenter -t 6036 -u -i -n -p
- [[email protected] ~]# ps
- PID TTY TIME CMD
- 2595 pts/0 00:00:01 bash
- 6216 pts/0 00:00:00 nsenter
- 6217 pts/0 00:00:00 bash
- 6250 pts/0 00:00:00 ps
退出时不会停止容器
- [[email protected] ~]# exit
- logout
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 4cd31fa09d48 Redis "docker-entrypoint.s?? 23 minutes ago Up 6 minutes 6379/tcp redis1
八. 删除容器
第一步: 需要停止容器
- [[email protected] ~]# docker container stop redis1
- redis1
- [[email protected] ~]# docker container ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
第二步: 删掉容器
- [[email protected] ~]# docker container rm redis1
- redis1
- [[email protected] ~]# docker container ls
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
补充: 一次性删除全部已经退出的容器
来源: http://www.bubuko.com/infodetail-3164318.html