Docker 基本概念:
- 镜像(Image):像是用于创建 Docker 容器的模板
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- Docker Machine:是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker
- Docker 主机(Host): 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
- Docker daemon:是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信
- Client( Docker客户端):是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信
安装
Docker 要求 CentOS 系统的内核版本高于 3.10 通过 uname -r 命令查看你当前的内核版本
uname -r
使用 root 权限登录 Centos。确保 yum 包更新到最新(可选)。
yum -y update
移除旧版(非必须,如果安装过):
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装依赖:
yum install -y yum-utils device-mapper-persistent-data lvm2
添加yum源,更新 yum 缓存
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
查看所有版本
yum list docker-ce --showduplicates | sort -r
安装docker:
yum -y install docker-ce-18.03.1.ce # 这是指定版本安装
yum -y install docker-ce # 这是安装最新稳定版
启动/开机启动
systemctl start docker && systemctl status docker && systemctl enable docker
测试运行
docker version
docker run hello-world
删除:
yum remove docker-ce
rm -rf /var/lib/docker
重启docker服务
systemctl daemon-reload
systemctl restart docker
配置文件:
/etc/sysconfig/docker
/usr/lib/system/docker.service
日志:
var/log/message |grep docker
镜像
搜素镜像
docker search java
- NAME:镜像仓库名称。 - DESCRIPTION:镜像仓库描述。 - STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于 GitHub的 stars0 - OFFICAL:表示是否为官方仓库 - AUTOMATED:表示是否是自动构建的镜像仓库。
- 查看镜像
docker images
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
镜像 【需要带上版本号,默认latest 版本】
下载
docker pull java:8
删除 【需要带上版本号,默认latest 版本】
docker rmi java:8
删除所有的镜像
docker rmi $(docker images -q)
容器
使用以下docker run命令即可新建并启动一个容器
-d选项:表示后台运行
--name mynginx:将容器命名为mynginx
-v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
-v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs
-P选项:随机端口映射
-p选项:指定端口映射,有以下四种格式。
-- ip:hostPort:containerPort
-- ip::containerPort
-- hostPort:containerPort
-- containerPort
--net选项:指定网络模式,该选项有以下可选参数:
--net=bridge:默认选项,表示连接到默认的网桥。
--net=host:容器使用宿主机的网络。
--net=container:NAME-or-ID:告诉 Docker让新建的容器使用已有容器的网络配置。
--net=none:不配置该容器的网络,用户可自定义网络配置。
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx
常用命令
列出所有的容
docker ps -a
查看容器所有信息
docker inspect f0b1c8ab3633
查看容器日志
docker container logs f0b1c8ab3633
查看容器进程
docker top f0b1c8ab3633
停止容器
docker stop f0b1c8ab3633
强制停止
docker kill f0b1c8ab3633
停止所有的容器
docker stop $(docker ps -aq)
删除容器 -f 强制删除正在运行的容器
docker rm f0b1c8ab3633
删除所有的容器
docker rm $(docker ps -aq)
进入容器
docker exec -it f0b1c8ab3633 /bin/bash (有的容器需要把 /bin/bash 换成 sh)
退出
exit
导出容器(导出容器快照到本地文件))
docker export f0b1c8ab3633 > xyz.tar
导入容器快照,以下实例将快照文件 xyz.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/xyz.tar | docker import - test/ubuntu:v1
也可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互。
容器与宿主机相互复制文件
从容器里面拷文件到宿主机:
docker cp 7aa5dc458f9d:/etc/nginx/nginx.conf /mydata/nginx
从宿主机拷文件到容器里面:
docker cp 要拷贝的宿主机文件路径 容器id:要拷贝到容器里面对应的路径
Docker虚拟化原理
Docker是如何将机器的资源进行隔离的?
答案是:联合文件系统,常见的有AUFS、Overlay、devicemapper、BTRFS和ZFS等。
写时复制(Cow全称copy-on-write)只是在需要写时才去复制,这个是针对已有文件的修改场景 用时分配
(allocate-on-demand) 针对原本没有这个文件的场景
镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker
官方和国内很多云服务商都提供了国内加速器服务,例如: 网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了:
配置完后要重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker