Docker
一、使用docker的优点原因
二、环境准备
docker的安装
1、安装gcc
yum -y gcc
2、安装教程官网
docker安装官网
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:[镜像版本号]

浙公网安备 33010602011771号