1.Docke介绍
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
Docker通常用于如下场景:
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
1.1 Docker镜像
镜像是一个只读的模板,用来创建Docker容器;
Docker提供了一个简单的机制来创建或更新现有的镜像,用户可以直接从其他人那里下载一个已经做好的镜像来直接使用;
1.2 Docker容器
容器是从镜像创建的运行实例;可以看做是一个简易版的Linux环境和运行在其中的应用程序;(镜像是只读的)
1.3仓库
集中存放镜像文件的场所;仓库注册服务器(Register)存放着多个仓库,每个仓库包含了多个镜像,每个镜像有不同的标签;
类比:
Docker仓库--Git
注册服务器--GitHub
2.Docker安装(CentOS7)
CentOS7系统Centos-Extras库已经自带Docker,可以直接安装:
# yum -y install docker
启动Docker服务:
# systemctl start docker
# systemctl status docker
测试运行hello-world
# docker run hello-world
[root@localhost qwq_bak]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
3.镜像
3.1获取镜像
$ docker pull ubuntu:16.04
3.2 列出本地镜像
# docker images
3.3 创建
$ docker run learn/tutorial apt-get install -y ping
4 容器
4.1启动、运行、终止
4.1.1启动容器
两种方式:
基于镜像新建容器并启动:docker run
将终止状态的容器重启:docker start
# docker run -t -i ubuntu:16.04 /bin/bash
-t 分配一个伪终端并绑定到容器标准输入
-i 让容器的标准输入保持打开
# docker run ubuntu:16.04 /bin/echo "hello World"
利用docker run创建容器时,其执行步骤为:
1.检查本地是否存在指定镜像,否则下载
2.利用镜像创建并启动一个容器
3.分配文件系统
4.从宿主机网桥借口桥接一个虚拟接口到容器
5.配置IP
6.执行用户指定应用程序
7.执行完毕后终止容器
# docker ps
4.1.2后台运行 -d
# docker run -d ubuntu:16.04 /bin/sh -c "while true;do echo hello World;sleep 2;done"
# docker logs a2130bf7254c
通过docker logs获取容器输出信息
# docker run -d -P training/webapp python app.py
# docker port ...
4.1.3终止容器
docker stop
终止状态的容器可以用docker ps -a命令看到
4.2进入容器(-d 容器进入后台)
4.2.1 attach命令:
# docker run -idt ubuntu
# docker ps
# docker attach <docker-name>
4.2.2 nsenter命令
安装:
#cd /tmp
#curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-;
#cd util-linux-2.24
#./configure --without-ncurses && make nsenter
#cp nsenter /usr/local
使用:
#docker inspect -f {{.State.Pid}} <container>
#nsenter --target <pid> --mount --uts --ipc --net --pid
解释nsenter指令中进程id之后的参数的含义:
* –mount参数是进去到mount namespace中
* –uts参数是进入到uts namespace中
* –ipc参数是进入到System V IPC namaspace中
* –net参数是进入到network namespace中
* –pid参数是进入到pid namespace中
* –user参数是进入到user namespace中
更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
# wget -P ~https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
# echo “[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker” >> ~/.bashrc; source ~/.bashrc
这个文件中定义了很多方便使用 Docker 的命令,例如 docker-pid 可以获取某个容器的 PID;而 docker-enter 可以进入容器或直接在容器内执行命令。
# echo $(docker-pid )
# docker-enter
4.3导入导出
4.3.1导出容器:docker export
#docker export ed1a7cb1f5af > ubuntu.tar
4.3.2导入容器快照为镜像:docker import
#cat ubuntu.tar | docker import ubuntu.tar
也可以通过指定URL或某个目录来导入:
#docker import http://example.com/exampleimage example/imagerepo
4.3.3导入镜像存储文件到本地镜像库:docker load
4.4删除容器
删除终止状态的容器:docker rm
删除运行中的容器:docker rm -f
清理所有处于终止状态的容器:docker rm $(docker ps -a -q)
5 仓库
5.1登录
#docker login
5.2基本操作
5.2.1查找仓库中的镜像
#docker search ...
5.2.2下载镜像
#docker pull ...
docker push推送镜像到Docker Hub
5.2.3自动创建
5.3私有仓库
5.3.1安装运行docker-registry
6 基本命令总结
docker attach 登录一个已经在执行的容器
docker build 建立一个新的image
docker commit 提交一个新的image
docker cp 将容器中的文件拷贝到主机上
docker daemon docker运行可指定项详解
docker diff 较一个容器不同版本提交的文件差异
docker events 获取sever中的实时事件
docker export 导出一个容器
docker history 显示一个image的历史
docker images 列出image
docker import 导入已有的image
docker info 展示docker的信息
docker inspect 显示更底层的容器或image信息
docker kill 杀死docker进程
docker load 加载image
docker login 登录docker注册服务器
docker logs 获取容器的日志
docker pause 暂停容器中的所有进程
docker port 端口转发
docker ps 列出所有容器
docker pull 从远端拉取一个image
docker push 推送image到注册服务器
docker restart 重启一个容器或多个容器
docker rmi 删除image
docker rm 删除一个或多个容器
docker run 运行一个新的容器
docker save 打包image
docker search 搜索images
docker start 启动一个容器
docker stop 停止一个容器
docker tag 为image打标签
docker top 显示容器中的进程
docker unpause 取消暂停所有的进程
docker version 显示版本信息
docker wait 阻塞容器运行