docker的使用主要分为容器,镜像,和仓库
仓库主要用来存储镜像文件,通过仓库下载镜像文件到docker服务端
第一、docker基本安装与启动
1.安装docker 通过清华大学镜像文件安装 下载
wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo 下载docker镜像文件到 /etc/yum.repo.h 下面
编辑此文件,把里面的
https://download.docker.com连接替换传https://mirrors.tuna.tsinghua.edu.cn/docker-ce
镜像地址,因为里面的地址是国外的,下载比较慢吧
docker-ce.repo文件内容如下:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/gpg
2.docker需要镜像加速器
在etc中创建这样的目录和文件
/etc/docker/daemon.json
daemon.json 这个文件中加入如下代码:
{
"registry-mirrors": ["https://registry.docker-cn.com","多个...."]
}
3.启动docker 服务
systemctl start docker.services
4.把docker设置为开机启动服务
systemctl enable docker
5.把docker添加到用户组
usermod -aG docker root , 这里可以是其他的名字
第二、docker基本命令的使用
docker version 版本信息
镜像命令:
docker info :查看docker信息包括容器,镜像等
docker search :查询镜像文件 如何 nginx
docker pull / docker images pull :拉去镜像文件 两种写法
docker images/docker images ls :列出镜像文件列表 两种写法
docker image rm image_id : 移除镜像,image_id:镜像id
容器命令:
docker ps -a : 查询所有容器中的进程,默认不加-a 只显示运行的进程
docker run 镜像名字:通过镜像来来创建一个容器并启动 包含了docker start
docker create :创建容器,但没有启动,必须在去执行docker start
docker stop : 停止容器
docker start : 启动容器
docker pause : 暂停容器
docker unpause : 取消暂停容器
docker kill :杀掉当前的容器进程
docker inspect 容器名:用来查询具体的容器对象的内部信息,包括网络,ip地址等等(常用)
docker exec 容器ID/name /bin/bash:这个是进入到运行的容器里面,在容器中执行命令 可以通过--help 来查询 exec用法
这里是很多docker镜像的版本文件:
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/
第三、制作docker镜像文件
docker制作镜像步骤:
1.启动一个容器
2.提交一个镜像
docker commit -p 容器名称
就会提交一个镜像文件,但是没有 tag之类的名字
这时候需要 设置一下镜像的tag 和仓库名称
3.设置tag
docker tag -h 可以查看帮助命令
docker tag 镜像名称 目标镜像
注意:这个前面的名字 respo 必须要和镜像仓库名字保持一致,因为要push指定的仓库地址
4.登录仓库地址
docker login -u 用户名
秘密:为仓库网站密码
5.推送镜像到仓库地址
docker push 对应的仓库地址镜像名称 hongyabing/nginx
如:https://cloud.docker.com/repository/docker/hongyabing/nginx/
注意:镜像名称必须对应仓库地址,才能推到下面的仓库地址,不能用hongyabing/tomcat ,但是我自己试过如果网站上的仓库地址没有,会根据的推送的tag标签的名称来创建仓库地址的,
我使用的镜像:hub.docker.com和阿里云。
第四、dokcer网络端口的设置
有以下四种设置映射的端口,主要映射到所在的物理机即docker容器运行的宿主机上的ip地址
第五、docker存储卷
主要用来给docker中的启动的容器 设置对应的外部存储券地址,防止在容器停止删除后,容器中的数据会被删除掉。
docker有两种挂载卷:
docker Bind 卷: 需要手动创建绑定、命令:docker run -it -v hostdir:volumedir --name bbox busybox 例:docker run --name busybox_volmun -it -v /data/volmun:/data/web/ busybox:latest
dokcer manger 卷:由docker容器自行管理 、命令:docker run -it --name bbox1 -v /data busybox 例:docker run --name busybox_volmun -it -v /data/volmun busybox:latest
我
们可以通过docker inspect 容器,来查看mounts中的挂载路径
共享卷
经常遇到如何把war架包部署到docker容器中运行的实例中去,如tomcat中的内部webapps文件下:
1、先通过命令 docker inspect tomcat 查看他的底层信息,找到他的工作路径: "WorkingDir": "/usr/local/tomcat"
或者通过如下的命令进入到tomcat运行的内部,查看他的路径。
2.通过命令:docker cp /xxx.war CONTAINER ID :/usr/local/tomcat/webapps,这样你就成功的把项目部署到运行的容器里面的文件夹下
第六、制作Dockerfile文件
通过制作Dockerfile文件来构建镜像文件,可以自己定义里面要执行的命令。
制作镜像步骤:
1.创建Dockerfile文件,直接vim Dockerfile 然后在里面编写命令行。
2.在Dockerfile文件所在的目录下执行 docker build -t 别名:版本号 ./
如:docker build -t busybox_jason:3.0 ./
运行镜像容器:docker run --name bbox --rm busybox_jason:3.0 cat /data/web/html/index.htm(意思:启动一个镜像,查看这个index.htm,运行结束就会移除这个容器)
备注:Dockerfile文件必须是大写的开头
我的Dockerfile文件如下:
COPY:可以复制文件、目录到一个指定的容器路径下,如果是目录的话,会把目录下的所有的文件复制到指定的目录结构下。
ADD:如下图
Dockerfile命令语法:
指令 | 说明 |
FROM | 指定所创建镜像的基础镜像 |
MAINTAINER | 指定维护者信息 |
RUN | 运行命令 可以指定多个 用&& 来连接 |
CMD | 指定启动容器时默认执行的命令 |
LABEL | 指定生成镜像的元数据标签信息 |
EXPOSE | 声明镜像内服务所监听的端口 |
ENV | 指定环境变量 |
ADD |
赋值指定的 |
COPY | 赋值本地主机的 |
ENTRYPOINT | 指定镜像的默认入口、这个命令设置了,一般会覆盖CMD命令,但不会被其他命令行覆盖的 |
VOLUME | 创建数据挂载点 |
USER | 指定运行容器时的用户名或UID |
WORKDIR | 配置工作目录 如:WORKDIR /usr/local ,其他地方引用 ./ |
ARG | 指定镜像内使用的参数(例如版本号信息等) |
ONBUILD | 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令 |
STOPSIGNAL | 容器退出的信号 |
HEALTHCHECK | 如何进行健康检查 |
SHELL | 指定使用SHELL时的默认SHELL类型 |
我的Dockerfile内容如下:
#Desciption : test image
#下载镜像文件,一般都是pull 拉去官网的镜像
FROM busybox:latest
# 注册镜像的作者和邮箱
MAINTAINER jason
#LABEL maintanier = "jason " # LABEL 标签也可以代替上面的 maintainer
# COPY 这个指令 拷贝宿主机上的文件到镜像文件里面
COPY index.htm /data/web/html/
# ENV 环境变量 可以key =value 或 key value 值可以设置多个用反斜线 \ 加多个
ENV docker_root = /data/web/html/ \
home = /data/yum.repos.d/
VOLUME ${docker_root}
# 这是复制一个目录下的所有文件到指定的文件夹下
COPY yum.repos.d /data/yum.repos.d/
#ADD https://nginx.org/download/nginx-1.17.0.tar.gz /usr/local/src/
#这里应用的workdir 下面可以直接使用 ./,可以使用多个WORKDIR 引用的地方是究竟原则.
WORKDIR /usr/local/
# ADD nginx-1.17.0.tar.gz ./ # 这里 ./ 就是上面的WORKDIR
# # ADD指令 可以下载网上文件和本地tar文件,如果是本地tar文件,就会展开目录,如果是网上的不会展开
#ADD nginx-1.17.0.tar.gz ./
ADD https://nginx.org/download/nginx-1.17.0.tar.gz ./
VOLUME /data/volmun/
#监听的端口
EXPOSE 89/tcp
RUN cd /usr/local/
RUN tar -xf nginx-1.17.0.tar.gz
注意:docker 有时候会启动错误如下图,出现这种情况一般是daemon.json这个文件有问题,直接移除,再重新执行如下命令
systemctl daemon-reload ,systemctl start docker 即可