Docker学习笔记
Docker学习笔记
[TOC]
简介
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
我的理解就是,他是一个大环境,然后在docker里可以自己搭建许多小环境,并且非常灵活,想要的环境也可以从镜像库中拉取,这就解决了我们很多时候的环境问题、
安装docker
在kali2020版本中我使用两条命令即安装了docker
sudo apt update
sudo apt install -y docker.io
1.
更新软件包可以让我们安装的软件版本更新
2.
使用命令 sudo apt install -y docker.io
进行安装,出现如下,选确定即可
3.
安装完成,通过命令 docker -v
查看版本
可以看到安装完毕
docker常用命令
ps:这里使用自己vps上的docker服务来进行测试
常用命令
启动docker
systemctl start docker
关闭docker
systemctl stop docker
重启docker
systemctl restart docker
查看docker信息
docker info
列出本地镜像
docker images
查找镜像
docker search < >
列出已启动的容器
docker ps (docker ps -a 表示显示已存在的所有容器)
拉取镜像
docker pull
容器状态
打开: docker start id
关闭: docker stop id
删除操作
删除镜像:docker rmi id
删除容器:docker rm id
ps:一般都是先停止容器,然后删除容器,最后删除镜像
镜像与容器
一句话讲清容器与镜像的关系:容器 = 镜像image + 读写层
可以看到容器与镜像是包含的关系,镜像运行起来就是容器,通过镜像才能运行容器,所以这两个是完全不同的东西,也是docker最重要的两个部分
docker镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为UnionFS( Union file system 统一文件系统),镜像可以基于dockerfile构建,dockerfile是一个描述文件,里面包含了若干条密令,每条命令都会对基础文件系统创建新的层次结构。
镜像常用命令
查看镜像
命令:docker images
可查看本地所有的镜像
列表 | 意思 |
---|---|
TAG | 镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本,用REPOSITORY:TAG来定义不同的镜像;TAG来定义不同的镜像; |
IMAGE ID | 镜像ID,镜像的唯一标识 |
CREATE | 镜像创建时间 |
SIZE | 镜像大小 |
OPTIONS | 可选参数:-a 显示所有镜像(包括中间层)-q 只显示镜像 ID-qa可以组合–digests 显示镜像的摘要信息 –no-trunc 示完整的镜像信息 |
REPOSITORY | 镜像的仓库源 |
搜索镜像
命令:docker search
从 Docker Hub 上检索镜像的详细信息。如:docker search java
例:搜索所有镜像名包含 java 的
拉取镜像
命令:docker pull 镜像名称:[TAG]
例:这里拉取一个shiro反序列化的镜像,用来复现
命令: docker pull medicean/vulapps:s_shiro_1
如上图拉取镜像即会下载一些东西
删除镜像
命令: docker rmi id
构建镜像
命令:docker build [OPTIONS] PATH
如果想要构建镜像得有dockerfile,通过dockerfile来构建
例如:
命令: docker build -t ezphp .
容器常用命令
创建容器与端口映射
命令:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
参数 | 解释 |
---|---|
–name | “容器新名字”:为容器指定一个名称; |
-i | 以交互模式运行容器,通常与-t或者-d同时使用; |
-t | 为容器重新分配一个伪输入终端,通常与-i同时使用; |
-d | 后台运行容器,并返回容器ID; |
-P | 随机端口映射,容器内部端口随机映射到主机的端口 |
-p | 指定端口映射,格式为:主机(宿主)端口:容器端口 |
一般常用的命令即是 docker run -d -p 端口号:80 name
启动交互式容器:docker run -it -d -p name
举个栗子(还是用到上面的shiro例子):
命令:docker run -d -p 8080:8080 medicean/vulapps:s_shiro_1
(映射在8080端口)
返回一串数字,这个容器id
这时代表容器创建完成,我们打开ip对应的端口号
如图所示,这就是一个容器,里面配备所有环境,成功访问
列出容器
命令:docker ps [OPTIONS]
参数 | 解释 |
---|---|
-a | 显示所有的容器,包括未运行的。 |
-f | 根据条件过滤显示的内容。 |
-format | 指定返回值的模板文件。 |
-l | 显示最近创建的容器。 |
-n | 列出最近创建的n个容器。 |
–no-trunc | 不截断输出。 |
-q | 静默模式,只显示容器编号。 |
-s | 显示总的文件大小。 |
启动与停止
启动命令:docker start id
停止命令:docker stop id
重启命令:docker restart id
、
删除容器
命令: docker rm id
与镜像不同的是 这里删除命令是rm ,镜像是rmi(images)
进入容器
命令:docker exec -it id 执行命令
这时就进入到docker里面了,可以查看docker里面的代码、环境等,也可以更改里面的东西。
ps:进入docker里面,更改或者删掉里面的任何东西后,如果重启docker,都会恢复的。所以如果需要docker里面的某些东西做些永久性的改变,就需要docker commit
。
容器文件拷贝
#从容器内拷贝docker cp 容器ID/名称: 容器内路径 容器外路径
#从容器外拷贝docker cp 容器外路径 容器ID/名称: 容器内路径
Dockerfiles
Dockerfile 包含创建镜像所需要的全部指令。基于在 Dockerfile 中的指令,我们可以使用
Docker build
命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
FROM
所有 Dockerfile 都必须以 FROM
命令开始。FROM
命令会指定镜像基于哪个基础镜像创建,接下来的命令也会基于这个基础镜像(注:CentOS 和 Ubuntu 有些命令可是不一样的)。FROM
命令可以多次使用,表示会创建多个镜像。具体语法如下:
FROM <image name>
MAINTAINER
设置该镜像的作者,可以写自己名字
MAINTAINER <author name>
RUN
在 shell 或者 exec 的环境下执行的命令。RUN
指令会在新创建的镜像上添加新的层面,接下来提交的结果用在Dockerfile的下一条指令中。语法如下:
RUN <command>
简单的说就是可以执行命令行的指令,在镜像开始的时候进行运行
例:RUN yum install wget
EXPOSE
指定容器在运行时监听的端口。
EXPOSE <port>
WORKDIR
指定RUN
、CMD
与ENTRYPOINT
命令的工作目录。类似cd,语法如下
WORKDIR /var/www/html
表示建立在网址根目录之下
CMD
ADD©
这里把ADD和COPY两个指令放一起,说明它们两个功能很类似。有时候,随便使用哪一个都行,它们的作用都是把本地的文件添加到Docker image里面。两者唯一的区别是,ADD的功能更强大一些,ADD会拷贝文件并且解压文件,COPY只能拷贝文件。
ADD <source> <destination>
例如第一个指令的意思就是将hello复制到接下来要build的docker image的根目录(hello为本地文件)
ENV
设置环境变量
这里用一张趣味的图
创建简单的apache服务器
首先创建一个文件夹,存放dockerfile和index.html
编写index.html
很简单的显示页面,完成后保存
编写dockerfile
大致意思就是选自apache2-php7的镜像,并将index.html页面复制到目录下,使它显示在根目录,用80端口也就是将他们以网页的形式显示出来
进行创建镜像
命令:
docker build -t test .
将端口映射出去
命令:
docker run -i -d -p 30002:80 test
打开网页
完成一个简单的apache服务器
Portainer 安装与配置
简介
Portainer 是一个开源、轻量级Docker管理用户界面,基于Docker API,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
安装步骤
搜索镜像
docker search portainer/portainer
拉取镜像
docker pull portainer/portainer
运行镜像
docker run -d -p 9000:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name dev-portainer portainer/portainer
本机访问
访问端口9000即可
首次登陆设置密码即可
这里选择local即可,remote是集群,反正也不知道啥意思,用着先
成功后即可看到本机上的容器情况
那我觉得还是命令行的好用一些,更快捷,图形化更形象