docker

作者: 骏龙ll | 来源:发表于2021-01-04 21:41 被阅读0次

    1、安装
    先卸载
    ···yum remove docker
    docker-client
    docker-client-latest
    docker-common
    docker-latest
    docker-latest-logrotate
    docker-logrotate
    docker-engine
    再安装安装包
    yum install -y yum-utils
    设置镜像仓库(使用国内镜像)
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    更新yum软件包索引
    yum makecashe fast
    安装最新的
    yum install docker-ce docker-ce-cli containerd.io
    启动
    systemctl start docker
    检查是否安装成功
    docker version
    hello word
    docker run hello-world
    查看镜像
    docker images
    卸载
    a卸载依赖
    yum remove docker-ce docker-ce-cli containerd.io
    b删除资源
    rm -rf /var/lib/docker

    默认工作路径/var/lib/docker

    阿里云镜像加速

    docker是怎么工作的
    Docker是一个Client+Server结构的系统,Docker的守护进程运行再主机上,通过Socket从客户端访问!
    DockerServer接收到Docker-Client的指令,就会执行这个命令

    Docker的常用命令
    帮助命令:
    docker version
    docker info
    docker --help
    镜像命令
    docker images查看主机镜像
    搜索
    docker search mysql
    可选项,通过收藏来过滤
    --filter=stars=3000(docker search mysql --filter=stars=3000)
    下载镜像
    docker pull mysql [:tag] (例子:docker pull mysql:5.7)
    删除镜像
    docker rmi -f(全部删掉)
    docker rmi -f image的id (删除指定容器)

    容器命令

    -说明:有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
    docker pull centos(新建容器)
    docker run centos (启动容器)
    -d 后台运行
    -it使用交互方式运行,进入容器查看内容
    -p指定容器的端口 -p 8080
    1、主机端口:容器端口
    2、主机端口:容器端口(常用)
    3、容器端口
    ip:主机端口:容器端口
    启动并进入容器
    docker run -it centos /bin/bash
    ls查看容器内地centos
    exit 退出容器
    docker ps:正在运行的容器
    docker ps -a 运行过得容器
    容器删除命令
    docker rm $(docker ps -a -q)
    正在运行的容器不能删除
    docker start 容器id 启动容器
    docker restart 容器id 重启 容器
    docker stop 停止当前正在运行的容器
    docker kill 容器id 杀掉运行容器

    常用的其他命令

    docker run -d 镜像名 :后台运行
    坑:容器启动后会发现自己没有提供服务,就会立刻停止,就是没有程序了
    查看日志
    docker logs -f -t --tail(没学会)
    查看容器元数据
    docker inspect 容器id
    进入当前正在运行的容器(通常都是后台运行的)
    需进入修改配置
    1、docker exec -it 容器id bashshell (进入容器后开启一个新的终端)
    2、docker attach 容器id (进入的是正在运行的命令行而不是开启一个新的窗口相较于1)
    从容器内拷贝文件到主机上
    docker cp 容器id:容器内路径 目的的主机路径

    官方下载

    docker run -it --rm tomcat(用完即删,用于测试)

    运行nginx
    docker run d --name nginxlsl -p 3344:80 nginx
    其中 --name是命名
    -p 宿主机端口:容器内部端口

    部署tomcat
    docker run tomcat
    docker run -d -p 3355:8080 --name tomcat01 tomcat

    启动安装elasticsearch
    docker run -d --name elasticsearch -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
    特别耗内存,可在其中加入-e EX_JAVA_OPTS="-Mms64m -Xmx512m"
    Kibana 连接es

    可视化

    portainer(先用这个,不是最佳选择)
    Rancher(CI/CD再用)
    docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

    commit镜像

    docker commit 提交容器程为一个新的副本
    docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
    生成的新镜像可以以后正常使用

    容器数据卷

    什么是容器数据卷
    docker理念,将应用和环境打包成一个镜像!如果容器删除,数据就会丢失。需求数据可持久化。
    容器之间可以有数据共享的技术!
    Docker容器中产生的数据可以同步到本地就是卷技术。
    目录的挂载,将我们容器内的目录挂载到linux上面!

    使用数据卷

    方式一:使用命令挂载 -v 例子docker run -v 主机目录:容器内目录
    部署mysql
    docker run -d -p 3310:3306 --name mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    具名挂载 -v 名字:容器内路径
    匿名挂载 -v 容器内路径
    指定路径挂载 -v /卷路径:/容器内路径
    在挂载后加上:ro或:rw 就是(只读和可读写的权限)针对的是在内部的权限

    初识dockerfile

    dockerfile就是可以用来构建镜像,之前用commit创建过。就是命令脚本,通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令都是一层。

    创建一个dockerfile1
    内容:
    FROM centos
    VOLUME ["volume01","volume"]
    CMD echo "---end---"
    CMD /bin/bash
    

    用dockerfile构建镜像命令,记住加 .
    docker build -f dockerfile1 -t lishuailing:1.0 .
    多个容器同步卷 启动时 --volumes-from
    结论:容器之间可以做一些配置信息之间的传递,通过数据卷可以实现。数据卷的声明周期可以一直持续的没有容器使用为止。一旦持续到了本地可以永久保存。
    Dockerfile的使用
    1、编写一个dockerfile文件
    2、docker build构建成为一个镜像
    3、docker run 运行镜像
    4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)
    docker构建过程
    基础知识
    1、每个保留关键字(指令)都必须是大写字母
    2、执行从上到下顺序执行
    3、#标识注释
    4、每一个指令到会创建提交一个新的镜像层,并提交!
    DockerFile指令
    FROM #基础镜像,一切从这里开始构建
    MAINTAINER #镜像是谁写的,一般是姓名+邮箱
    RUN #镜像构建的时候需要运行的命令
    ADD #步骤,tomcat镜像,这个tomcat压缩包!添加内容
    WORKDIR #镜像的工作目录
    VOLUME #挂载的目录
    EXPOSE #保留端口配置
    CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
    ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
    ONBUILD #当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令
    COPY #类似ADD,将我们文件拷贝到镜像中
    ENV #构建的时候设置环境变量
    练习:编写dockerfile文件

    FROM centos
    MAINTAINER lishuailing<635032144@qq.com>
    ENV MYPATH /use/local
    WORKDIR $MYPATH
    RUN yum -y install vim
    RUN yum -y install net-toolsx
    EXPOSE 80
    CMD echo $MYPATH
    CMD echo "----and----"
    CMD /bin/bash
    

    通过文件构建镜像
    docker build -f mydockerfile-centos -t mycentos:1.0 .

    实战tomcat镜像

    1、准备镜像文件tomcat压缩包,jdk压缩包
    2、编写dockerfile文件,官方命名为Dockerfile 此命名在build时候就会自动寻找文件,不需要-f指定了

    From centos
    MAINTAINER lishuail<635032144@qq.com>
    COPY readme.txt /usr/local/readme.txt
    ADD apache-tomcat-9.0.41.tar.gz /usr/local/
    ADD jdk-8u271-linux-aarch64.tar.gz /usr/local/
    RUN yum -y install vim
    ENV MYPATH /usr/local
    WORKDIR $MYPATH
    ENV JAVA_HOME /usr/local/jdk1.8.0_11
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
    ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    EXPOSE 8080
    CMD /usr/local/apache-tomcat-9.0.22/bin/startup/sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
    
    

    启动容器

    docker run -d -p 9090:8080 --name lishuailingTomcat -v /home/lishuailng/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/lishuailing/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.o.22/logs diytomcat
    

    Docker 网络

    理接Docker0
    清空所有环境
    ip addr
    docker 每启动一个容器,docker就会给容器分配一个ip,只要电脑上安装了一个dokcer,就会有一个docker网卡(桥接模式),使用的技术是evth-pair技术。
    每启动一个容器主机就会多出一个网卡(成对出现)
    思考一个场景,微服务下,database url=ip:,项目不重启,数据库ip换了,我们希望可以处理这个问题,可以名字来进行访问容器。
    用--link技术可以实现但是比较笨(使用自定义网络更好)
    自定义网络
    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
    把docker容器发布在自己的网络上就可以相互ping 通了,通过名字也可以直接ping通
    自定义网络的好处:
    mysql/readis-不同的集群使用不同的网络,保证集群是安全和健康的
    测试大同别的网端的容器到本网端
    docker net work mynet tomcat01
    一个容器两个IP地址

    相关文章

      网友评论

          本文标题:docker

          本文链接:https://www.haomeiwen.com/subject/candoktx.html