CentOS7系统下之Docker容器学习

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    

 
赋值指定的<src>路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下 注:支持tar.gz和网络上面的文件也会被添加到路径容器中,如果是网络文件不会被展开,如果是本地的tag文件就会被展开的。如:ADD https://nginx.org/download/nginx-1.17.0.tar.gz   /usr/local/
COPY   赋值本地主机的<scr>路径下的内容到容器中的<dest>路径下;一般情况下推荐使用COPY而不是ADD注:可以复制文件、目录到一个指定的容器路径下,如果是目录的话,会把目录下的所有的文件复制到指定的目录结构下
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 <xxx@qq.com>

#LABEL maintanier = "jason <xxx@qq.com>" # 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 即可

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值