Docker个人学习笔记
类似虚拟机,但更轻量级,方便移植,每个应用部署在一个容器里,相当于一个进程,彼此之间隔离docker run -d -p 8080:8080 --name 容器名 -v 宿主机目录:容器目录 镜像名:tag注意:宿主机目录必须是绝对路径docker create ems(网桥名) ===> docker create -d bridge ems(网桥)
参考资料:
Docker容器技术&Docker-Compose实战教程(视屏教程)
写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。
公司开发虽然一直有在使用docker,但只能说是会用,原理等则是一知半解,这里系统性的学习一下。
目录
一、docker概念、与传统虚拟机的对比、安装
什么是docker
类似虚拟机,但更轻量级,方便移植,每个应用部署在一个容器里,相当于一个进程,彼此之间隔离
docker与传统虚拟机的对比
docker安装
镜像、容器、仓库的关系
镜像:打包好的软件运行环境
容器:镜像的一次运行
怎么拉取远程仓库中的镜像
docker pull 镜像名:tag,如 docker pull mysql:5.7
怎么加速拉取远程镜像:
修改远程仓库为阿里云
二、镜像的基本操作指令
如何查看本地镜像
docker images
1.REPOSITORY 镜像的仓库源
2.TAG 镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
如何拉取镜像
1. docker pull 镜像名:版本号
2. docker pull 镜像名:摘要
如何搜索远程仓库的镜像:
docker search mysql
如何删除镜像
docker image rm 镜像名:tag | 镜像名:id(后面可以跟多个镜像,同时删除多个镜像)
docker image rm -f 镜像名:tag | 镜像名:id (强制删除)
docker rmi -f $(docker images -aq) (利用管道删除所有镜像)
三、容器的基本操作指令
启动一个容器
docker run 镜像名:tag 或者 镜像:id
可以多次启动,每次启动都是一个单独的容器,结合之前讲的类似线程隔离理解
docker run的运行流程如下
如何将容器内监听的端口映射到宿主机
docker run -p 8080(宿主机端口) :8080(容器内监听的端口) 镜像名:tag 或者 镜像:id
(因为容器内监听的是容器内的端口,不映射的话无法从宿主机访问到容器内的运行实例)
如何后台运行
docker run -d(后台运行) -p 8080:8080 --name tomcat(我们可以自己给容器取名) 镜像名:tag
这里-p可以设置多个,方便映射多个端口,如 -p 5672:5672 -p 15672:15672(因为docker run启动的容器是控制台模式,退出即关闭,所以需要后台运行)
如何查看容器运行情况
docker ps
docker ps -a (查看所有容器,包括运行的和停止的)
如何查看容器内运行日志
docker logs 容器id | 容器名称(只展示截至目前为止的日志)
docker logs -f 容器id | 容器名称 (展示实时日志)
docker logs -tf 容器id | 容器名称 (展示日志并且带上时间戳)
docker logs --tail n(任意数字) 容器id | 容器名称 (查看末尾的n行)
如何查看容器内进程
docker top 容器id | 容器名称
如何进入容器
docker exec -it 容器id | 容器名称 bash(容器内类似一个只携带镜像所包含的软件的微型的操作系统,只支持最简单的操作指令)
如何在操作系统与容器内传输文件
(1)从容器复制文件到操作系统
docker cp 容器唯一标识(name或者id) :容器内资源路径 操作系统文件路径/文件目录
(2)从操作系统复制文件到容器
docker cp 文件|目录名 容器唯一标识(name或者id):/容器内资源路径
如何实现宿主机和容器之间的目录关联
(1)自定义数据卷目录
docker run -d -p 8080:8080 --name 容器名 -v 宿主机目录:容器目录 镜像名:tag
注意:宿主机目录必须是绝对路径
(2)自动数据卷目录
docker run -d -p 8083:8080 --name 容器名 aa:容器目录 镜像名:tag
第二种方式相当于实现了容器内文件的备份,即使容器被删除文件也还在,适用mysql等镜像
如何查看数据卷
docker volums ls
如何查看某个数据卷的细节
docker volums inspect 卷名
创建数据卷
docker volume create 卷名
删除无用数据卷
docker volume prune
docker volume rm 卷名
如何查看网桥配置
docker network ls
创建自定义网桥
docker create ems(网桥名) ===> docker create -d bridge ems(网桥)
启动容器时指定网桥
docker run -d -p 8080:8080 --network tomcat01 tomcat:8.0-jre8
删除网桥
docker netword rm 网桥名称
查看网桥详细
docker inspect ems
四、Dockerfile
Dockerfile的作用
用来构建我们的自定义镜像
怎么执行Dockerfile
docker build -t 镜像名:tag .(注意最后面有个点,代表工作目录,即Dockerfile所在目录)
docker build -f dcokerfile文件名 -t 镜像名:tag .
第一个语句是使用官方默认文件名Dockerfile,第二个语句则是我们自定义文件名,因此需要加-f来指定文件名。
关键字解析
注意:所有的关键字全部需要大写
FROM
描述基于哪一个镜像创建,必须写在Dockerfile的第一行
使用docker build -t 镜像名:tag 新建我们自己的镜像
使用docker images查看,可以看到新建的镜像
RUN
定义构建镜像时需要执行的指令,比如这里RUN yum install -y vim
就是指在构建镜像时下载vim指令
RUN的参数格式可以和linux一样,也可以写成json的格式。
需要注意的是,这两种写法在docker中会被认为是2个不同的指令,虽然他们效果相同。
虽然效果上没有差异,但是docker build在构建时会检查之前是否已经构建过相同指令(即分层的效果),如果相同的话就不会重新构建,上面这2种写法不能互相间复用之前的分层,会重新构建。
EXPOSE
用来指定对外开放的端口
WORKDIR
用来指定工作目录
注意,WORKDIR必须是绝对路径,除非前面已经提供了绝对路径
比如下面,WORKDIR /data,WORKDIR bb ,最后的工作目录是/data/bb(路径不存在的话会自动创建)
COPY
用来将工作目录中的文件复制到镜像中
ADD
和COPY功能类似,却别在于ADD后面的参数可以设置URL,以此来下载网络资源,也可以跟压缩包,复制完成后ADD会自动解压
VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
ENV
定义环境变量
ENTRYPOINT
指定容器启动的时候要运行的命令,命令可以追加
CMD
效果同ENTRYPOINT,指定容器启动的时候要运行的命令,但只有最后一个会生效
更多推荐
所有评论(0)