一、Docker命令
- 下载镜像
语法:docker pull <image>docker pull nginx docker pull centos
- 运行镜像到容器
语法:docker run -d -p 80:80 <image>#-p 将容器端口发布到主机 #-d 在后台运行容器并答应容器id docker run -d -p 80:80 nginx
- 查看正在运行的镜像
语法:docker ps
- 在linux中运行
- 将镜像保存为tar文件
语法:docker save <image> > tarName.tar
- 强制移除镜像
语法:docker rmi -f <image> - 把压缩包下载下来
语法:docker load < tarName.tar - 查看所有镜像
语法:docker images
二、Docker启动命令
- 启动命令:systemctl start docker
- 开机启动:systemctl enable docker
三、Docker 帮助命令
- 官方文档地址
- 文档命令:docker –help
- 显示docker版本信息:docker version
- 显示docker系统信息,包含镜像和容器信息:docker info
四、Docker镜像命令
- 列出本地镜像:docker images [option]
-a列出本地所有镜像
–digests显示摘要信息
-q显示镜像id
–no-trunc显示完整进行信息 - 从docker hub 中查找镜像:docker search [option] 镜像名(https://hub.docker.com)
–automated 只列出automated build类型镜像
–no-trunc显示镜像完整描述
-s n只显示n以上的评分(stars)的镜像 - 加载镜像:Docker pull [options] 镜像名称
- 删除本地镜像:docker rmi 镜像名称(参数:-f强制删除)
删除一个镜像:docker rmi hello-world(:latest)
删除多个镜像:docker rmi name:Tag name2:Tag
删除本地镜像(正在使用的镜像不删除):docker rmi -f $(docker images -q)(-q为返回所有镜像的id)
杀掉进程,然后删除:docker kill 进程id
五、Docker 容器命令
- 启动容器:docker run [options] image [COMMAND] [ARG…]
-d 后台运行
-it 打开交互容器 - 查看日志:docker logs [options] 容器名
-f跟随打印
-t显示时间戳
–tail=n显示n条,一般用来查看新日志
–since=’’2019-10-10”显示从日期之后的日志 - 查看容器中运行的进程信息,支持ps参数
- 查看容器运行细节:docker inspect 容器id
六、Docker 工作原理
Docker更小更好
七、Docker镜像
- UnionFS:联合文件系统(该合并的合并到一起,把多个文件系统都合并到联合文件系统,在联合文件系统上,每个文件系统可以在上面运行,当有多个文件系统要使用相同文件时,谁先挂载谁先使用;挂载的都是只读,更改的文件都是副本,副本优先显示;删除:是逻辑删除,标记为删除,实际上A删除,但是B显示文件还在)
- Docker镜像是一个分层结构
eg:tomcat软件包:kernel(实时操作系统)-》 centos-》 jdk-》 tomcat-》 tomcat软件包 - 镜像加载原理
- 退出容器
Ctrl+p+q 临时退出容器,保持状态
Exit 退出容器,不保持装填 - 开启一个或多个已经停止的容器/停止容器/重启容器:docker start/stop/restart 容器id
- 杀死一个容器:docker kill 容器id前面部分数字(kill相当于拔电源,stop相当于正常关机)
- 删除一个或多个容器:docker rm [options] 容器名
- 删除所有容器:docker rm -f $(docker ps -q)
- rm与stop/kill 区别:rm掉的不在了,stop/kill掉的还在
- docker wait:阻塞运行直到容器停止
- docker export:将文件系统作为一个tar文档
- docker port:列出指定容器的端口映射
- docker login:登录一个docker镜像仓库
- docker logout:退出登录
- docker push [options] image:tag:将本地镜像传送到镜像仓库
- docker history:查看指定镜像创建的历史过程
- docker save:将指定镜像保存为tar文件
eg:docker save hello-world > hello.tar - docker load:导入tar文件为镜像;eg: docker load < hello.tar
八、部署自己的网站到nginx上
方式一:更改显示文件(麻烦)
方式二:用Dockerfile(下面使用方式二)
使用当前位置作为Nginx保存位置
步骤:
-
进入正在运行的容器并交互:docker attach [options] container
-
进入正在运行的容器并交互:docker exec [options] containerId command [args…]
-d 后台运行
-i 交互
-t 分配一个伪终端
exec和attach区别:
exec进入,即使exit退出也能保持容器运行
attach进入,exit退出后,容器不再运行 -
在容器和宿主机间互相拷贝数据:
宿主机—> 容器:docker cp [option] 宿主机文件路径 容器id:容器内路径
容器—> 宿主机:docker cp [option] 容器id:容器内路径 宿主机文件路径 -
从容器创建一个新的镜像:docker commit [options] containerId imageName:tag(容器id 镜像名:标记,如latest等)
-a (author)提交镜像的作者
-c 使用docker指令来创建镜像
-m 文字说明
-p (pause)提交时容器暂停(关机后再打开也还存在)
-
Tomcat
Tomcat 默认访问webapps页面,但是webapps中没有东西,东西都在webapps,所以默认访问找不到页面,如下:所以我们要对文件名进行修改
改名
把tomcat镜像放到本地(根据tomcat创建新镜像,创建容器,再提交到镜像,就变成自己的镜像,下次打开的时候不会不见)
-
Docker容器数据卷
1.Docker理念:将运行的环境与软件打包形成一个容器来运行,需要对容器的数据进行保存,也就是数据持久化。- 提交数据到镜像,保存
- 使用docker数据卷。卷:是目录或者文件,存在于一个或多个容器内,但不属于联合文件系统。
2.数据卷:可以数据持久化保存,独立于容器的生命周期,所以docker在结束或者删除容器时候不会删除挂载的数据卷
- 数据卷可以在容器间共享数据
- 数据卷修改数据直接生效,互相直接使用
- 数据卷怎么改,都不会包含在镜像的更新中
- 数据卷的生命周期会一直持续到没人用它为止
3.如何使用数据卷
3.1.使用命令绑定:docker run -it -v /宿主机绝对路径:容器内绝对路径 imageName
修改数据也共享
关掉容器后依然共享,因为两个文件已经绑定。
***查看是否绑定:docker inspect 镜像部分id
3.2.设置权限
4.用Dockerfile构建容器数据卷
4.1.在宿主机根目录下,新建mydockerfile文件夹,在文件夹内新建Dockerfile文件
4.2.用volume指令给镜像添加一个或多个数据卷(容器数据共享)
4.3. 通过build生成新镜像
4.4. 运行镜像为容器
4.5. 通过inspect可以查看容器信息,找到容器数据卷对应在宿主机
4.6. 宿主机中进入到上面数据卷的目录
4.7. 在容器中新建文件,在宿主机新建文件,查看数据是否共享(容器和宿主机)
注意:通过数据卷实现数据共享,需要先创建数据卷,主机和容器都进入到数据卷中,(容器通过数据卷名进入,主机通过数据卷id进入,可以在host通过inspect查看对应id)然后主机需要进入到对应数据卷的_data下。和文件共享系统不一样
5.数据卷容器(命名的容器挂载数据卷)(容器和容器共享使用数据卷容器)
命名的容器挂载数据卷,其他的容器通过挂载这个容器(父容器),该命名的容器称为数据卷容器
5.1. 父容器
5.2. 子容器1
5.3. 子容器2
5.4. 主机host
-
在docker中安装MongoDB和mysql并且在docker中运行
7.1.下载:docker pull mysql、docker pull mongo
7.2.运行mysql镜像为容器:docker run -itd –name mysqlcon -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=123456 mysql
7.3. 同样操作mongo
-
了解Dockerfile
8.1Dockerfile执行流程
8.1.1.每条指令必须大写
8.1.2.指令从上到下顺序执行
8.1.3.每一条指令都会创建一个容器并提交一个镜像(每一条指令在对原来的镜像操作后都会创建一个新的镜像层,dockerfile会基于刚刚提交的镜像层再运行一个容器,相当于一条产品加工流水线,每个工人都对产品进行操作,再放到流水线上交给下一个工人操作,工人就相当于每一个命令)
8.1.4.下一条指令基于上一步提交的镜像运行一个容器,操作然后提交一个镜像
8.1.5.如果还有下一条,重复执行步骤4,直到执行完毕
8.2.Dockerfile中的命令
8.2.1. FROM:必须放在第一条指令(如果不知道用什么镜像,可以写成scratch,scratch是一个特殊的空白镜像),eg:FROM scratch
8.2.2. MAINTAINER:镜像的维护人员的信息,eg:MAINTAINER [email protected]
8.2.3. RUN:用于执行run后面跟着的命令行命令,有两种形式:1》shell格式:RUN shell命令行;2》exec格式:RUN [“可执行文件”,”参数1”,”参数2”](方括号内的经过编译是json数据,必须使用双引号;如果run代码过长,用&&连接,\来换行);
8.2.4. EXPOSE:容器对外暴露一个端口;
8.2.5. WORKDIR:指定从镜像创建容器时,进入容器的时候默认目录
Redis:
8.2.6. ENV:用来构建镜像时,设置环境变量,后面呢会用来设置版本信息
8.2.7. VOLUME:共享数据卷的位置
8.2.8. COPY:复制指令,为从宿主机复制文件到容器 指定路径;COPY 源路径 目标路径、COPY [“源路径”,”目标路径”]
(注意:文件拷贝到文件夹时,文件夹结尾的/别漏了,COPY 1.txt /usr/tmp/;源路径支持通配符:COPY haha* /usr/tmp/ 、COPY ha?.txt /usr/tmp/)
8.2.9. ADD:从宿主机复制文件到容器指定路径,同COPY,但也有额外功能:
1》支持自动解压缩,如gzip,tar;
2》会自动处理url
8.2.10. LABEL:镜像的描述信息
8.2.11. CMD:指定容器开始运行的时候执行的命令,也就是镜像run的时候,一个Dockfile只有最后一个会生效,有两种格式:
1》CMD shell脚本;
2》CMD [“可执行文件”,”参数1”,”参数2”](Dockerfile中的CMD命令可以被在docker run image params时后面的参数所替换)
8.2.12. ENTRTPOINT:和CMD一样,也是指定容器启动时的参数
8.2.13. ONBUILD:用于当其他Dockerfile以我作为基础镜像时,才运行的指令
-
使用Dockerfile自己创建镜像
9.1. 创建一个自己的centos,自带vim和网络
9.2. 新建一个文件夹createimagesteset,在该文件夹下打开终端
9.3. 编辑Dockerfile文件,build自己的镜像
9.4. 把自己创建的镜像传到阿里云
新建仓库,上面有教程,直接复制到终端运行就可以
完……