一、Docker的三大元素
1.容器:镜像的实例,可以运行
2.镜像:程序运行打包的环境
3.仓库:用于存放镜像
二、Docker的安装
2.1 CentOS6.8系统安装Docker
#安装环境依赖
yum install -y epel-release
#安装docker
# 1. yum install -y docker-io 如果此方法报错 No package docker-io available ,采用法2
# 2.yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
#查看是否有docker的配置文件
cat /etc/sysconfig/docker
#启动docker的后台服务验证
service docker start
#查看是否安装成功
docker version
如果是CentOS7,安装如下:
2.2 配置镜像加速器及HelloWord试运行
理论上应从DockerHub上pull拉取,但是速度太慢,选择国内阿里云镜像拉取
2.2.1 阿里云镜像加速
登录阿里云–>产品与服务–>容器镜像服务->镜像加速器,获取加速地址
修改Docker配置文件,更改镜像仓库的地址:
#修改Docker配置文件,更改镜像仓库的地址
vi /etc/sysconfig/docker
#修改的内容 other_args="--registry-mirror=https://你自己的账号加速信息.mirror.aliyuncs.com"
#启动Docker后台服务
service docker restart
#检查配置的加速器是否生效
ps -ef|grep docker
# 注意:网易云加速步骤基本同阿里云加速
出现以下信息即表示生效,显示自己配置的加速地址
2.2.2 启动Docker后台容器(测试运行 hello-world)
#启动运行helloworld
docker run hello-world
#docker run做了什么? run了一个名称为hello-world的镜像
docker run做了什么?
三、Docker常用交互命令
3.1 帮助命令
#查看验证安装版本
docker version
#查看具体信息,比docker version信息更全面
docker info
#命令帮助
docker -help
3.2 镜像命令
#列出本地主机上的镜像
docker images
# OPTIONS说明:
# -a : 列出本地所有的镜像(含中间映像层)
# -q : 只显示镜像ID。
# --digests :显示镜像的摘要信息
# --no-trunc :显示完整的镜像信息,不要截取,ID会贼长
## docker image 各个选项说明:
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
## docker search 某个XXX镜像名字,需要去https://hub.docker.com网站上去搜索
docker search 某个XXX镜像名字
# OPTIONS说明:
# --no-trunc : 显示完整的镜像描述
# -s : 列出收藏数不小于指定值的镜像。 docker search -s 30 tomcat
# --automated : 只列出 automated build类型的镜像;
## docker pull 拉取某个镜像,格式: docker pull [:版本号]
docker pull 镜像名字[:TAG]
#例子:docker pull tomcat 注意此条命令等价于:docker pull tomcat:lastest 省略版本号,默认最新版
#如果不需要最新版,则为 docker pull tomcat:7.0(拉取7.0版本)
## docker rmi 删除某个镜像 格式: docker rmi [:版本号]
docker rmi 某个XXX镜像名字ID
#可能同时有几个版本,不写版本号,默认删除最新
# 删除单个: docker rmi -f 镜像ID
# 删除多个: docker rmi -f 镜像名1:TAG 镜像名2:TAG
# 删除全部: docker rmi -f $(docker images -qa)
3.3 容器命令
docker pull centos
#新建并启动容器,格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#OPTIONS说明(常用):
# --name="容器新名字": 为容器指定一个名称;
# -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
# -i:以交互模式运行容器,通常与 -t 同时使用;
# -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
# -P: 随机端口映射;
# -p: 指定端口映射,有以下四种格式
# ip:hostPort:containerPort IP:主机端口:容器端口(最常使用)
# ip::containerPort
# hostPort:containerPort
# containerPort
# -e: 环境配置
如:
docker run -it centos /bin/bash #启动并进入容器
exit # 从容器中退出到主机
##列出当前所有正在运行的容器 docker ps [OPTIONS]
docker ps [OPTIONS]
#OPTIONS说明(常用):
# -a :列出当前所有正在运行的容器+历史上运行过的
# -l :显示最近创建的容器。
# -n:显示最近n个创建的容器。
# -q :静默模式,只显示容器编号。
# --no-trunc :不截断输出。
# 退出容器:两种退出方式
#1.容器停止退出,不能再回来
exit
#2.容器不停止退出,还能回来
ctrl+P+Q
#启动容器
docker start 容器ID或者容器名
#重启容器
docker restart 容器ID或者容器名
#停止容器
docker stop 容器ID或者容器名
#强制停止容器
docker kill 容器ID或者容器名
#删除已停止的容器
docker rm 容器ID
##一次性删除多个容器:
#(1)docker rm -f $(docker ps -a -q)
#(2)docker ps -a -q | xargs docker rm
相对重要的命令
#启动守护式容器
docker run -d 容器名
#查看容器日志
docker logs -f -t --tail 容器ID
##options
# -t 加入时间戳
# -f 跟随最新的日志打印
# --tail 数字 显示最后多少条
#查看容器内运行的进程
docker top 容器ID
#查看容器内部细节
docker inspect 容器ID
#进入正在运行的容器并以命令行交互,两种方式
#方式1:
docker exec -it 容器ID /bin/bash
#exec 是在容器中打开新的终端,并且可以启动新的进程
#方式2:
docker attach 容器ID
#attach 直接进入容器启动命令的终端,不会启动新的进程
#从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
常用命令总结
##常用命令总结
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
commit Create a new image from a container changes # 提交当前容器为新的镜像
cp Copy files/folders from the containers filesystem to the host path #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container # 创建一个新的容器,同 run,但不启动容器
diff Inspect changes on a container's filesystem # 查看 docker 容器变化
events Get real time events from the server # 从 docker 服务获取容器实时事件
exec Run a command in an existing container # 在已存在的容器上运行命令
export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history Show the history of an image # 展示一个镜像形成历史
images List images # 列出系统当前镜像
import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info Display system-wide information # 显示系统相关信息
inspect Return low-level information on a container # 查看容器详细信息
kill Kill a running container # kill 指定 docker 容器
load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
logout Log out from a Docker registry server # 从当前 Docker registry 退出
logs Fetch the logs of a container # 输出当前容器日志信息
port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
pause Pause all processes within a container # 暂停容器
ps List containers # 列出容器列表
pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
restart Restart a running container # 重启运行的容器
rm Remove one or more containers # 移除一个或者多个容器
rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run Run a command in a new container # 创建一个新的容器并运行一个命令
save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
start Start a stopped containers # 启动容器
stop Stop a running containers # 停止容器
tag Tag an image into a repository # 给源中镜像打标签
top Lookup the running processes of a container # 查看容器中运行的进程信息
unpause Unpause a paused container # 取消暂停容器
version Show the docker version information # 查看 docker 版本号
wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值
四、Docker 镜像练习
1 nginx
tomcat
可视化portainer
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
提交镜像
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# docker commit -m="tomcat增加hello" -a="likangg" 075aec1b0769 hellotomcat:1.0
五、Docker容器数据卷
容器删除了,数据不会删除
使用数据卷
方式一: 直接使用命令来挂载
方式一: 直接使用命令来挂载 -v
docker run -it -v 主机目录:容器目录
# docker commit -m="tomcat增加hello" -a="likangg" 075aec1b0769 hellotomcat:1.0
#实战,mysql的数据同步
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -v /home/mysql/log:/var/log -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名挂载和匿名挂载
#指定路径挂载 -v 宿主机路径:容器内路径
#具名挂载 -v 卷名:容器内路径
#匿名挂载 -v 容器内路径
docker volume inspect 卷名
注意:
1、所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/XXX
2、docker volume ls 查看所有的卷都在这个位置/var/lib/docker/volumes
拓展: 通过 -v 容器内路径:ro rw 改变容器的读写权限
ro readonly #容器只读
rw readwrite #容器可读可写
(2)一旦这个设定了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
ro: 容器内部对具名挂载的文件没有写权限,只能读取
方式二: DockerFile实现
DockerFile就是用来构建docker镜像的构建文件,命令脚本!
通过这个脚本可以生成对象,对象是一层一层的,脚本就是一个一个的命令,每个命令就是一层
# /home/docker-test-volume/dockerfilel 构建脚本文件
docker build -f /home/docker-test-volume/dockerfilel -t kang/centos:1.0 .
文件中的内容 指令必须大写
#--
FROM centos
VOLUME ["volume01","volume02"]
CMD echo “-----------end---------” #这里的每一个命令,就是镜像的一层
CMD /bin/bash
#--
构建文件中
这个卷和外部一定有一个同步的目录
数据卷容器:容器之间共享数据
如多个mysql数据同步
数据卷容器:容器隔离,数据共享
--volumes from
#docker run -it --name d1 kang/centos:1.0
#docker run -it --name d2 --volumes from d1 kang/centos:1.0
#d2 与d1 共享数据
mysql为例
docker run -d -p 3306:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -v /var/log -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes from mysql01 mysql:5.7
结论:容器之间配置信息的传递,数据卷容器的生命周期一直到最后一个容器stop为止。
六、DockerFile
dockerfile 用来构建docker镜像的文件
构建步骤:
1、编写一个dockerfile 文件
2、docker bulid 构建一个镜像
3、docker run 运行镜像
4、docker push 发布镜像
dockerfile命令
实战一:构建自己的centos
构建自己的centos
#1 编写编写一个dockerfile 文件 dockerfile-centos
FROM centos
MAINTAINER kang<123456@qq.com>
ENV MYPATH /user/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash
#2、docker bulid 构建一个镜像
docker build -f /home/docker-test-volume/dockerfile-centos -t mycentos:1.0 .
#3、运行
docker run -it mycentos:1.0
#4.发布到仓库
实战二:构建自己的tomcat
push到仓库
先注册账号登录
docker的全流程: