(1)容器与虚拟机的比较
它基于由 Google 公司推出的 Go 语言实现,是一种容器虚拟化技术。
与传统虚拟机的对比:
与传统虚拟机相比,Docker 的优势体现为启动速度快,占用体积小。
(2)Docker 服务器与客户端
Docker 是一个 C/S 架构程序,Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机的 Docker 守护进程。
(3)Docker 镜像与容器
镜像是构建 Docker 的基石,用户基于镜像来运行自己的容器。镜像也是 Docker 生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,是由一系列指令一步一步构建出来。例如:
添加一个文件;
执行一条命令;
打开一个窗口。
也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。
Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或者多个进程。可以认为,镜像是 Docker 生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登陆到容器中安装自己的软件或者服务。
所以 Docker 容器就是:
一个镜像格式;
一系列标准操作;
一个执行环境。
像集装箱一样,所有的容器按照相同的方式将内容装载进去,同样 Docker 也不关心集装箱运向何方,你只需要构建容器,上传到 Registry,然后下载到一个物理或者虚拟的环境中测试。像标准集装箱一样,Docker 容器方便替换,可以叠加,易于分发,并尽量通用。
(4)Registry(注册中心)
Docker 用 Registry 来保存用户构建的镜像。Registry 分为公有和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享和保存自己的镜像(说明:在 Docker Hub 下载镜像很慢,可以建立自己的私有 Registry)。
https://hub.docker.com
(1)挂载 Centos7.x 镜像
1.yum 包更新到最新
sudo yum update
2.安装需要的软件包,yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置 yum 源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装 docker
sudo yum install docker-ce
5.安装后查看 docker 版本
docker -v
(2)设置 ustc 镜像
ustc 是老牌的 linux 镜像服务提供者了,在 ubuntu 5.04版本的时候就在用。ustc 的 docker 镜像加速器速度很快。ustc docke mirror 的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
1.编辑该文件
vi /etc/docker/daemon.json
2.在该文件中输入如下内容
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
(3)Docker 的启动和停止
1.启动
systemctl start docker
2.查看启动状态
systemctl status docker
3.停止
systemctl stop docker
4.重启
systemctl restart docker
5.开机启动
systemctl enable docker
6.查看docker概要信息
docker info
7.查看docker帮助文档
docker --help
Ⅰ:查看镜像
docker images
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
镜像名称 | 镜像标签 | 镜像ID | 镜像创建日期(不是获取该镜像的日期) | 镜像大小 |
Ⅱ:搜索镜像
docker search 镜像名称
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|---|---|---|---|
仓库名称 | 镜像描述 | 用户评价,反应一个镜像的受欢迎程度 | 是否官方 | 自动构建,表示该镜像是由Docker Hub自动构建流程创建的 |
Ⅲ:拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
例如:下载centos7镜像
docker pull centos:7
Ⅳ:删除镜像
按照镜像ID或者名称删除(一般指定ID)
docker rmi 镜像ID/镜像名称
删除所有镜像
docker rmi `docker images -q`
Ⅰ:查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
查看最后一次运行的容器
docker ps -l
查看停止容器
docker ps -f status=exited
Ⅱ:创建和启动容器
创建容器常用参数说明:
创建容器命令:docker run
① 交互式方式创建容器:
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
这时通过 ps 命令查看,发现可以看到启动的容器,状态为启动状态
退出当前容器(容器也会停止运行)
exit
② 守护式方式创建容器
docker run -di --name=容器名称 镜像名称:标签
登陆守护容器的方式
docker exec -it 容器名称(或者容器ID) /bin/bash
③ 停止与启动容器
停止容器
docker stop 容器名称(或者容器ID)
启动容器
docker start 容器名称(或者容器ID)
Ⅲ:文件拷贝
如果需要将文件拷贝到容器内可以使用 cp 命令
docker cp 需要拷贝的文件或者目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
Ⅳ:目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器添加 -v 参数后边为宿主机目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 contos:7
如果共享的是多级目录,则可能出现权限不足的提示,这是因为Centos中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true
来解决挂载的目录没有权限的问题。
Ⅴ:查看容器的IP地址
可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
Ⅵ:删除容器
删除指定的容器
docker rm 容器名称(容器ID)
(1)拉取 mysql 镜像
docker pull centos/mysql-57-centos7
(2)创建容器
docker run -di --name=xcm_mysql -p 33060:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码
(3)进入 mysql 容器
docker exec -it xcm_mysql /bin/bash
(4)登陆MySQL
mysql -u root -p
(5)远程连接mysql
连接宿主机的IP,指定端口为33060
(1)拉取镜像
docker pull tomcat
(2)创建容器
docker run -di --name=myTomcat -p 9090:8080 -v /root/www/myTomcat/webapps:/usr/local/webapps tomcat
(1)拉取镜像
docker pull nginx
(2)创建容器
docker run -di --name=myNginx -p 80:80 nginx
(1)拉取镜像
docker pull redis
(2)创建容器
docker run -di --name=myRedis -p 6379:6379 redis
(1)容器保存为镜像
可以通过下面的命令将容器保存为镜像
docker commit myNginx mynginx_i
(2)镜像备份
可以通过下面的命令将镜像保存为tar文件
docker save -o mynginx.tar mynginx_i
(3)镜像的恢复与迁移
首先要确保没有重名镜像,然后执行此命令恢复
doker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
(1)概述
Docker 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。实际上就是为了创建出一个完全一致的环境。
(2)常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量(可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file |
将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file |
和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
(3)使用脚本创建镜像
步骤:
① 创建目录
mkdir -p /usr/local/dockerjdk8
② 下载 jdk 文件至 /usr/local/dockerjdk8
③ 创建文件 Dockerfile vi Dockerfile
#依赖镜像名称和ID
FROM centos
#声明镜像的创建者
MAINTAINER xiangchaoming
#设置当前目录
WORKDIR /usr
#执行shell命令创建目录
RUN mkdir /usr/local/java
#将jdk压缩文件复制到容器中(会自动解压)
ADD jdk-8u144-linux-x64.tar.gz /usr/local/java
#设置环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
④ 执行命令构建镜像(最后的 . 表示Dockerfile的目录为当前目录)
docker build -t='jdk1.8' .
⑤ 查看镜像是否构建完成
docker images
(1)私有仓库的搭建与配置
① 拉取私有仓库镜像
docker pull registry
② 启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
③ 打开浏览器输入 http://192.168.23.142:5000/v2/_catalog 看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空
④ 修改 daemon.json
vi./etc/docker/daemon.json
添加以下内容,保存退出。
{"insecure-registries": ["192.168.23.142:5000"]}
此步用于让 docker 信任私有仓库地址
(2)镜像上传至私有仓库
① 标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.23.142:5000/jdk1.8
② 上传标记的镜像
docker push 192.168.23.142:5000/jdk1.8