Docker学习笔记
docker images -aq 显示所有的镜像id DockerHub docker镜像官网 Docker search + 镜像名
通过收藏的star数过滤镜像:Docker search mysql --filter=STARS=3000 docker pull mysql 下载mysql,默认下载latest最新版本 docker pull 镜像名[:tag] 分层下载,docker image的核心 共用下载的镜像文件(联合文件系统) sha256 签名 .io 是真实地址 docker rmi -f + 容器id docker rmi -f $(docker images -aq) 递归删除全部容器
docker run [可选参数] image –name=“***”容器名字 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 docker run -it centos /bin/bash(bash终端窗口) 进入centos系统 exit 直接退出并停止容器 ctrl + P + Q 退出不停止容器 -p 指定容器端口 -p 8080:8080 docker ps -a 列出正在运行的容器和曾经用过的容器 -q 只显示容器编号 docker rm 容器id docker rm -f 移除全部容器 docker start 容器id docker restart 容器id docker stop 容器id docker kill 容器id
后台启动命令: docker run -q 镜像名 docker ps时若启动的容器没有被提供服务的时候,会自杀。
查看日志: -t 时间戳 –tail number 日志条数 docker logs -f -t / -tf 容器id
查看进程信息: docker top 容器id
查看镜像元数据: docker inspect 容器id
进入当前正在运行的容器: docker exec -it(交互模式) 容器id /bin/bash 进入容器后开启一个新终端,可以在里面操作 docker attach 进入容器后不开启新终端,不启动新的进程
从容器中复制内容到主机: docker cp 容器名:/home/***.*** /home
docker安装nginx DockerHub搜索(建议网站)或者docker search nginx docker pull nginx docker images docker run -d --name nginx01 -p (端口号)3344:80 nginx -p 宿主机端口:容器内端口(相当于外网对内网的端口映射) docker ps 测试: curl localhost:3344 进入nginx docker exec -it nginx01 /bin/bash 查看nginx配置: whereis nginx 进入nginx目录
tomcat: docker pull tomcat:9.0 docker images docker run -d -p 3355:8080 tomcat01 tomcat docker exec -it tomcat /bin/bash 缺少linux命令,缺少webapps,web文件存在在webapps.dist文件夹下
es+kibana:
//可视化: //portainer:docker图形化界面管理工具,提供一个面板操作 //docker run -d -p 8080:9000\
UnionFS联合文件系统 images分层进行(centos只包含基本内核(bootfs)和基本命令) ubuntu 基础镜像(内核)【第一层】+python【第二层】+jdk【第三层】+Gcc【第四层】+…
commit镜像 docker commit 提交容器成为一个新的镜像 docker commit -a=“name” -m=“add ***” + 容器id + 镜像名:[TAG]
容器数据卷:
挂载数据目录,确保Docker内的数据和主机或者容器之间的数据进行同步(双向同步)
docker run -it -v 主机目录:容器内目录
通过docker inspect 容器id查看挂载
好处:在本地修改,容器内的数据可以自动同步
安装MySQL docker search MySQL
docker pull mysql:5.7
docker run -d(后台运行) -p(端口映射) 3310:3306 -v(卷挂载) /home/mysql/conf:/etc/mysql/conf.d(配置挂载) -v /home/mysql/data:/var/lib/mysql(数据挂载) -e MYSQL_ROOT_PASSWORD=passward --name mysql01 mysql:5.7
具名挂载和匿名挂载 匿名挂载: -v 容器内路径 docker run -d -(-P随机映射端口)p --name nginx01 -v /ect/nginx nginx
查看所有volume的情况:
docker volume ls
具名挂载:
-v 卷名:容器内路径
查看这个卷:
docker volume inspect 卷名
所有docker内的容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/****/_data
可以通过具名挂载方便的找到一个卷,大多数情况下在使用的是“具名挂载”
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载
扩展:
docker run -d -p --name nginx01 -v juming_nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx01 -v juming_nginx:/etc/nginx:rw nginx
ro 只读
rw 可读可写
Dockerfile挂载卷: Dockerfile就是一个用来构建Docker镜像的命令脚本
创建一个dockerfile文件,名字可以随机,建议Dockerfile 文件中的内容 指令大写 参数
RFROM centos
VOLUME [“volume01", "volume02"] (挂载卷的第二种方式 匿名挂载方式)
CMD echo "_____end_____"
CMD /bin/bash
这里的每一个命令,就是镜像的一层
数据卷容器:(多个mysql同步数据) 实现容器内的数据(拷贝)共享: docker run -it --name docker01 --volumes-from docker01 +容器名+版本(容器id)
多个mysql共享数据: docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d-v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passward --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=passward --name mysql02 --volumes-from mysql01 mysql:5.7
实现两个容器数据同步
DockerFIle:用来构建docker镜像的文件。命令参数脚本,定义一切步骤 构建步骤: 1,编写一个dockerfile文件 2,docker build构建成为一个镜像 3,docker run 运行镜像 4,docker push 发布镜像(DockerHub,阿里云镜像仓库)
很多官方镜像都是基础包,只有基础的运行环境。通常开发会搭建自己的镜像
构建过程: 1,每个保留关键字(指令)都必须是大写字母 2,执行从上到下顺序执行 3,#表示注释 4,每个指令都会创建一个新的镜像层,并且提交
DockerImages:通过Dockerfile构建镜像,最终发布和运行
Docker容器:运行环境,镜像运行起来提供服务
Dockerfile指令: FROM #基础镜像,一切从这里开始 MAINTAINER #镜像是谁写的,姓名+邮箱 RUN #镜像构建的时候需要运行的命令 ADD #步骤:tomcat镜像,这个tomcat压缩包,往镜像中添加内容,压缩包会自动解压 VOLUME #挂载的目录 WORKDIR #镜像的工作目录 EXPOST #保留端口配置 CMD #指定这个容器启动的时候要运行的命令。 E #指定这个容器启动的时候要运行的命令,可以追加命令 ONBUILD #当构建一个被继承Dockerfile 这个时候就会运行ONBUILD指令。触发指令 COPY #类似ADD, 将我们的文件拷贝到镜像中 ENV #构建的时候设置环境变量
Docker Hub中的镜像
docker history + 容器id 查看镜像生成的步骤
命令行追加命令,需要用
不能追加命令则是用CMD实现的
在centos上构建tomcat镜像
FROM centos MAINTAINER yuluo***********@qq.com
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz /usr/local ADD apache-tomcat-9.0.22.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
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAH?OME/lib/dt.jar:JAVA_HOME/lib/tools.jar ENV CATALINA_HOME /usr/localapache-tomcat-9.0.22 ENV CATALINA_BASH /usr/localapache-tomcat-9.0.22 ENV PATH
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin"
C
A
T
A
L
I
N
A
H
O
M
E
/
l
i
b
:
CATALINA_HOME/lib:
CATALINAH?OME/lib:CATALINA_BASH
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.22/bin/logs/catalina.out
发布镜像到DockerHub 通过命令登录: docker login -u [用户名]
登录之后docker push docker push 镜像名:[TAG]
|