官网关于Docker的介绍: Docker overview
资料:
每天5分钟玩转容器技术
尚硅谷-docker快速入门基础
Registry: 表示远程镜像仓库,如官方的镜像仓库或各个公司搭建的镜像仓库。里面存储的都是各种制作好的镜像(image)。
Client: 表示执行docker命令的终端
Docker_Host: 表示运行docker服务的宿主机
Docker_daemon: docker的守护进行,用于接收客户端发送的命令
客户端执行下载(pull)命令则会将仓库中指定的镜像(image)下载到本地docker服务中,运行(run)镜像(image)将生成一个容器。镜像与容器的关系可以理解为Java中的类与对象的关系。
CentOs7安装Docker: 官网安装说明
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
本地安装过程中遇到报错:Error response from daemon
[root@localhost local]# docker pull hello-world
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid
解决方式:
[root@localhost local]# yum install ntpdate
[root@localhost local]# ntpdate cn.pool.ntp.org
注:此处我用的是root用户登录的,故没有在命令前加sudo
由于docker官方的镜像仓库是在国外,故配置镜像加速器提高镜像下载速度:
配置文件路径: /etc/docker/deamon.json
文件内容如下:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["registry-1.docker.io"]
}
其中 http://hub-mirror.c.163.com 为网易云加速器,可更改为其它加速器
配置文件修改后须执行命令重新加载配置以使其生效:
Systemctl daemon-reload
Systemctl restart docker
至此docker安装完成
docker info ## 查看docker信息
docker version ##查看docker版本
Docker 命令
官网安装的最后一步是docker run hello-world
,而我本地使用的是docker pull hello-world
。这两者的区别是:docker pull
命令是从镜像仓库中下载指定的镜像文件(此处指hello-world镜像);docker run
命令则会先判断本地是否已存在指定镜像(此处指hello-world镜像),若不存在则先下载镜像在运行该镜像生成一个容器,否则直接运行该镜像生成一个容器。
docker images [options] 查看docker服务器上的镜像列表
-a 所有镜像
-q 只显示镜像ID
docker search 镜像名称 从镜像仓库中根据镜像名称搜素镜像,可模糊匹配
docker pull 镜像名称 从镜像仓库中根据镜像名称下载镜像
docker rmi 镜像名称或镜像ID 根据镜像名称或镜像ID从docker服务器上删除镜像
docker run [options] 镜像名称或镜像ID 运行指定的镜像
–name 指定容器的名称,若不指定则随机分配
-d 以后台方式运行并返回容器ID
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射, 格式为 宿主机端口号:容器端口号
docker ps [options] 查看容器列表
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。
docker stop 容器ID或容器名 停止容器
docker start 容器ID或容器名 启动已停止的容器
docker restart 容器ID或容器名 重启容器
docker kill 容器ID或容器名 强制停止容器
docker exec -it 容器ID或容器名 bashShell 进入正在运行的容器并以命令行交互
docker exec -it container_id /bin/bash
docker attach 容器ID或容器名 进入正在运行的容器并以命令行交互
注:attach 直接进入容器启动命令的终端,不会启动新的进程,exec 是在容器中打开新的终端,并且可以启动新的进程。本地尝试docker attach命令未成功
进入容器后可以通过ctrl+p+q(control+p+q)退出,此方式不会停止容器。使用exit命令退出容器则容器也将被停止。
docker rm 容器ID或容器名 删除已停止的容器,加上参数-f 可强制删除正在运行中的容器
docker cp 容器ID:容器内路径 目的主机路径 拷贝容器中的内容到宿主机上
docker logs [options] 容器ID或容器名 查看容器日志
-t 是加入时间戳
-f 跟随最新的日志打印
–tail 数字 显示最后多少条
数据卷 用于实现容器与宿主机、容器与容器间的数据共享
第一种直接使用命令
docker run -it -v 宿主机绝对路径:容器内部路径 镜像名或镜像ID
[root@localhost mydocker]# docker run -it -v /usr/local/mydocker/containerData:/usr/local/tomcat/containerData atguigu/tomcat:2.2
第二种利用dockerFile中的VOLUME 指令
生成镜像
docker build -f dockerFile文件路径 -t 镜像名 .
运行新镜像
通过此方式无法指定宿主机上的目录,使用命令查看默认的宿主机目录
docker inspect 容器ID或容器名称
在此基础上我们可以实现容器与容器之间的共享
docker run -it --volumes-from=父容器ID或父容器名 --name=当前容器名 镜像名或镜像ID
docker run -it --volumes-from=myCentOs_01 --name=myCentOs_02 90b1b41b9109
多个容器使用同一个镜像创建且该镜像的dockerFile中设置了VOLUME指令,容器之间使用–volumes-from指定关联
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
创建镜像
1.使用commit命令在容器的基础上创建新镜像
docker commit -a=作者信息 -m=概要 容器ID(可以是停止状态) 新镜像名称
2.使用dockerFile创建新镜像
每条保留字指令都必须大写且后面必须要跟至少一个参数
指令按照从上到下顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
##指令
FROM 镜像 ##指定新镜像是基于哪个镜像创建的,例如 FROM redis 指基于redis镜像创建新镜像 FROM scratch 基于空镜像创建新镜像
MAINTAINER authorInfo ##指定作者信息
RUN command ##新镜像创建时需要执行的命令
WORKDIR dir ##指定在创建容器后,终端默认登录后的目录
ENV param ##设置变量
EXPOSE port ##设置新镜像暴露的端口
ADD 宿主机目录 镜像中的目录 ##拷贝并解压文件
COPY 宿主机目录 镜像中的目录 ##拷贝文件
VOLUME [路径,路径] ##指定数据卷目录
CMD command ##指定容器启动时要运行的命令,可以有多个,只有最后一个有效,并会被docker run后的参数替换
ENTRYPOINT command ##指定容器启动时要运行的命令,只有一个,不回被docker run后的参数替换
ONBUILD command ##类似钩子,父镜像被继承后将触发
实际项目中会遇到需要将镜像打包发到现场,然后导入
## 导出镜像
docker save 镜像名/镜像id | gzip > xxx.tar.gz
## 导入镜像
docker load < xxx.tar.gz
win10下docker更改pull镜像的默认路径