Docker

docker的学习总结

一、使用docker的优点原因

轻量,基于容器的虚拟化,仅包含了的容器的runtime环境,例如:centOS/Ubuntu镜像就170MB;宿主机合一部署很多个

二、环境准备

docker的安装

1、安装gcc

yum -y gcc

2、安装教程官网

docker安装官网dokcer

3、运行测试

docker run hello-world

4、配置镜像地址,

vim /etc/docker/daemon.json
//网易云
"registry-mirrors":["http://hub-mirror.c.163.com"]

//阿里云
"registry-mirrors":["http://{自己的编码}.hub-mirror.aliyuncs.com"]
//把daemon.json改为daemon.conf。使用mv命令修改后,docker启动正常。
mv daemon.json daemon.conf
//重新加载
systemctl daemon-reload

5、停止docker的运行

systemctl stop docker
//卸载
yum -y remove docker-ce
rm -rf /var/lib/docker

三、docker 的基本命令使用

1、镜像的基本命令

  • 获取帮助命令

    docker --help
  • 查看镜像

    docekr images
    [-a,-q]
    --digest //显示镜像摘要信息
    --no-trunc //查询镜像完整信息
  • 搜索资源

    docker srech 某个镜像名称
    -s ? //搜索在收藏?以上的
    -no-trunc //显示镜像完整信息
  • 下载镜像

    docker pull 镜像名称:版本号
  • 删除镜像

    docker rmi 镜像名或镜像ID
    docker rmi -f 镜像名或镜像ID

    //使用多个删除的命令
    docker rmi -f 镜像名 镜像名 镜像名 .....
    //删除全部的
    docker rmi -f $(docker images -qa)

2、容器基本命令

  • 运行容器

    docker run -it --name 容器别名 镜像名/镜像ID
    [-i,-t,-d] //[交互容器,容器伪终端,后台运行不打开]
    --name //设置容器别名
  • 容器关闭

    exit
  • 离开容器

    ctrl+P+Q
  • 启动、重启、停止

    docker start 容器名称/容器ID
    docker restart 容器名称/容器ID
    docker stop 容器名称/容器ID
    docker kill 容器名称/容器ID
  • 显示运行容器

    docker ps
    [-a, -q , -l, -n ?] //运行历史、运行的ID、上一个运行的容器、上?运行容器
  • 删除容器

    docker rm 容器名称/容器ID
    docker rm -f 容器名称/容器ID
    docekr rm -f $(docker ps -qa)

    //xargs是linux的可变参数【就是查询出所有的id,xarg接收所有的参数然后删除】
    docker ps -a -q | xargs docker rm **加急的重要的**

3、重要的容器命令

  • 启动守护是容器

    docker run -d 镜像名/镜像ID
  • 查看容器的日志

    docker logs 容器名/容器ID
    -f //跟随时间打印
    -t //显示时间戳
    --tail ? //显示最后?行
    案例一
    使用linux的shell编程完成一个每两秒输出一句话
    docker run -d 镜像名/镜像ID /bin/bash -c "while true;do echo hello xiaoluo;sleep 2;done"
  • 查询容器内运行的进程

    docker top 容器名/容器ID
  • 查询容器内细节

    docker inspect 容器名/容器ID
  • 容器交互重新进入

    docker attach 容器名称/容器ID
    //容器中一个终端运行命令
    docker exec -t 容器名称/容器ID [使用命令] //例如:/bin/bash 运行容器
  • 容器中的文件拷贝到主机

    docker cp 容器名称/容器ID:容器内路径	目的主机

4、docker镜像补充

理解:UnionFS,联合文件系统[分层镜像]

例如:tomcat中有tomcat、idk8、centos、kernel

  • 启动镜像

    docker run -p 主机端口: docker容器端口 镜像名称/镜像的ID
  • 镜像提交

    docker commit -a="名称" -m="tomcat without docs" 容器id  别名atguigu/tomcat

5、容器数据卷

容器持久化、容器的数据共享

  • 创建数据卷

    docker -it -v /宿主机的绝对路径:/容器的绝对路径 镜像名称/镜像ID

    //设置只读的权限:ro RW=false
    docker -it -v /宿主机的绝对路径:/容器的绝对路径:ro 镜像名称/镜像ID

    //如果遇到没有权限
    --privileged=true
  • 查看配置项细节

    docker inspect 容器名称/容器ID

    "Mounts": [
    {
    "Type": "bind",
    "Source": "/home/luoStudy/hostValume",
    "Destination": "/containerValume",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
    }
    ],

    RW=true 没写保护,可以执行读写

6、Dockerfile编程

1、简单的数据卷使用案例

编写一个数据卷,编写一个镜像完成创建该镜像容器时有两个数据卷【数据卷主机的位置是随机的】

vim Dockerfile

# volume test FROM centos
VOLUME ["/containerValume1","/containerValume2"]
CMD echo "finished,---------success1"
CMD /bin/bash

//执行创建镜像
docker build -f /mydocker/Dockerfile -t xiaoluo/centos .

//之后创建容器即可

2、容器间数据共享

--volumes-from			//继承

各个容器间继承会共享,继承相当于复制
演示:
docker run -it --name doc03 --volumes-from doc02 xiaoluo/centos

7、Dockerfile解析

FROM		//镜像的来源
MAINTAINER //镜像的维护人的名称邮箱
RUN //镜像创建时候执行的命令
EXPOSE //对外暴露的端口
WORKDIR //工作目录,登录后的落脚点
ENV //构件设置时的环境变量
ADD //把构建的jar包拷贝出来【拷贝+解压缩】
COPY //复制文件
VOLUME //容器的数据卷,用于数据的保存和持久化
CMD //指定一个容器启动时要运行的命令,可以有多个命令,但是只有最后一个生效
ENTRYPOINT //指定一个容器启动是运行,有几条命令运行几条
ONBUILD //触发器,当构件一个被继承的Dockerfile是运行命令,父镜像在被子继承后父镜像的的onbuild被触发

案例一

例子一 centos添加功能和进去的时候所在的目录,添加vim和ipconfig
FROM centos
MAINTAINER luo<xiaoluo_66@163.com>

ENV MYPATH /usr/local //环境路径
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $PATH
CMD echo "success ------ ok"
CMD /bin/bash

案例二

例子二:使用curl查询连接的ip地址,而且不启动linux
FROM centos
RUN yum -y install curl
CMD ["curl","-s","http://ip.com"]


使用ENTRYPOINT 的可以在后面添加命令不报错
FROM centos
RUN yum -y install curl
ENTRYPOINT ["curl","-s","http://ip.com"]

使用触发器ONBUILD
ONBUILD echo "father_ in here"

案例三

例子三:自定义tomcat
FROM centos
MAINTAINER luo<xiaoluo_66@163.com>
RUN yum -y install vim
ADD apache-tomcat-9.0.53.tar.gz /usr/local
ADD jdk-8u301-linux-x64.tar.gz /usr/local
COPY cp.txt /usr/local/container.txt
#设置工作访问的路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk1.80_301
ENV CLASSPATH $JAVA_PATH/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.53
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.53
ENV PATH $PATH:$JAVA_HOMR/bin;$CATALINA_HOME/lib;$CATALINA_HOME/bin
#运行端口
EXPOSE 8080

//创建镜像
docker build -t mytomcat .
#启动运行tomcat
CMD /usr/local/apache-tomcat-9.0.53/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.53/bin/logs/catalina.out


//运行创建
docker run -d -p 8080:8080 --name tom01 -v /mytomcat/test:/usr/local/apache-tomcat-9.0.53/webapps/test -v /mytomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.53/logs --privileged=true 4e3345414ebc


//仿照一个运行案例
在主机test下创建WEB-INF web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">

<display-name>这是一个测试</display-name>
</web-app>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
<h1>docker的基本学习完成了,谢谢老师周阳</h1>
<%="I like study java" %>
</body>
</html>

四、安装软件

1、运行mysql

docker run -p 123456:3306 --name mysql01
-v /mysql/conf:/etc/mysql/conf.d
-v /mysql/logs:/mysql/logs
-v /mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456
-d mysql:8.0.26

//启动命令交互
docker exec -it 047f46c340c1 /bin/bash
//执行数据库导出
docker exec 047f46c340c1 sh -c 'exec mysqldump -uroot -p"123456" db_docker' >/mysql_databases/db_docker.sql

2、redis的运行配置

docker run -p 6379:6379
-v /myredis/data:/redis/data
-v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf
-d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
--appendonly yes

//运行客户端
docker exec -it 容器id redis-cli

五、阿里云推送镜像

//提交修改版本
docker commit -a luo -m"new mycentos1.4 with vim and ifconfig" 253a34989ba8 mycentos:1.4

//提交到阿里云没管理员用 sudo
$ docker login --username=哈利哈利1420290562 registry.cn-hangzhou.aliyuncs.com$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiaoluostudy/mycentos:[镜像版本号]$ docker push registry.cn-hangzhou.aliyuncs.com/xiaoluostudy/mycentos:[镜像版本号]

阿里云镜像查询

img

 

posted @ 2021-09-25 08:40  狼牙博客  阅读(98)  评论(0)    收藏  举报