HTML · 2022年4月14日 0

Docker使用指南

Docker学习

Docker 是什么

Docker 是一个应用打包、分发、部署的工具
    打包:就是把你软件运行所需的依赖、第三方库、软件打包到一起,变成一个安装包
    分发:你可以把你打包好的“安装包”上传到一个镜像仓库,其他人可以非常方便的获取和安装
    部署:拿着“安装包”就可以一个命令运行起来你的应用,自动模拟出一摸一样的运行环境,不管是在Windows/Mac/Linux。

安装Docker

1.安装gcc相关
    yum -y install gcc
    yum -y install gcc-c++
2.查看docker是否安装
    yum list installed | grep docker
3.卸载之前的版本
    yum remove docker \
                     docker-client \
                     docker-client-latest \
                     docker-common \
                     docker-latest \
                     docker-latest-logrotate \
                     docker-logrotate \
                     docker-engine
4.安装依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
5.设置阿里云镜像源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.更新yum软件包索引
    yum makecache fast
7.安装docker-ce
    yum -y install docker-ce

启动Docker

systemctl start Docker

Docker帮助命令

docker 命令 --help        万能命令

Docker镜像命令

docker images       查看所有镜像
docker serach xxx   搜索镜像
docker pull xxx     下载最新版本镜像(docker pull xxx:版本号)
docker rmi xxx      删除镜像

Docker容器命令

新建容器并启动:
    docker run [可选参数] image     
        参数:
            --name="xx"       容器名字
            -d              后台运行
            -it             使用交互方式运行,进入容器查看内容
            -p              指定ip
                -p 主机端口:容器端口(常用)
                -p 容器端口
退出容器:   
    exit
    快捷键Ctrl+p+q

查看所有在运行的容器:
    docker ps                       
        参数:
            -a              历史运行容器
            -n              最近运行容器
            -q              只显示容器编号

删除容器
    docker rm xxx
启动容器
    docker start xxx
停止容器
    docker stop xxx
重启容器
    docker restart xxx
强制停止容器
    docker kill xxx

Docker打包自己的镜像

提交容器成为新的副本
1、启动容器
2、修改容器内容
3、打包镜像
    docker commit -a="作者" -m="提交信息" 要打包的容器id 打包后的名字:TAG

Docker容器数据卷

将容器内的目录挂载到容器外

方式一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器目录:权限(ro只读,rw可读写)  容器id /bin/bash
挂载成功之后,目录共享,容器被删除共享出来的目录也不会删除,一旦这个了设置了容器权限,容器对我们挂载出来的内容就有限定了!

ro:只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

数据容器

多个容器同步数据(Mysql为例),挂载的一方为父容器(数据卷容器)

docker run -it --name 容器名 --volumes-from 绑定的容器id 镜像id
只要容器没有全部删除,那么文件就不会丢失

DockerFile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

# 创建dockerfile文件,内容如下:
# 内容:指令(大写) 参数

FORM centos

VOLUME ["volume01","volume02"]   # 默认挂载到外部的卷(匿名挂载),使用docker inspect 容器id查看 Mounts

CMD echo "-----end-----"
CMD /bin/bash

生成镜像

docker build -f 脚本文件 -t 镜像名(只能小写):版本 .

基础知识:

1、每个保留关键字(指令)都是必须是大写字母
2、执行从.上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!

DockerFile指令

FROM            #基础镜镜像,一切从这里开始构建
MAINTAINER      #镜像是谁写的,姓名+邮箱
RUN             #镜像构建的时候需要运行的命令
ADD             #步骤,tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR         #镜像的工作目录
VOLUME          #挂载的目录
EXPOSE          #暴露端口配置
CMD             #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT      #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD         #当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令。
COPY            #类似ADD,将我们文件拷贝到镜像中
ENV             #构建的时候设置环境变量!
CMM 和 ENTRYPOINT
CMD:
    FROM centos:7
    CMD ["ls","-a"]

    #当我们想追加一个命令
    docker run 容器id -l
    报错:
        docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "-l": executable file not found in $PATH: unknown.
    #CMD 的情况下-1 替换了CMD ["1s","-a"] 命令,-1不是命令所以报错!

ENTRYPOINT:
    #当我们想追加一个命令
    docker run ccd4457238d1 -l
    #ENTRYPOINT 是直接拼接在ENTRYPOINT[]命令后面的!

测试

Docker Hub中99%的镜像都是从FROM scratch开始的,然后配置需要的软件和配置来进行的构建

FROM centos:7

MAINTAINER susunxi<2048studio.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum install vim

EXPOSE 55555

CMD echo $MYPATH
CMD echo "--success--"
CMD /bin/bash

其它命令

查看日志
    docker logs xxx
查看容器内部的进程信息
    docker top xxx
查看镜像元数据
    docker inspect xxx
进入当前正在运行的容器
    docker exec -it xxx /bin/bash (进入容器开启新的终端)
    docker attach -it xxx (进入正在执行的终端)
从容器中拷贝文件到主机
    docker cp xxx:容器内路径 目的主机的路径
        示例:
            docker cp a23274bf7610:/home/test.java /home
查看镜像怎么构建
    docker history 镜像id 

Docker可视化管理工具安装

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

Linux开放端口

开发指定端口
    firewall-cmd --zone=public --add-port=端口号/tcp --permanent
重启防火墙
    firewall-cmd --reload
查看端口是否开放:
    firewall-cmd --zone=public --query-port=端口号/tcp