Docker使用
— docker安装使用 —
— linoda/lamp使用 —
出题需要….入坑….翻滚….翻滚…..坑中来回翻滚…
Docker安装
win7下docker安装及使用
kali下安装docker
官方文档(需要翻墙)
Docker层次
仓库(Repository)—— 镜像(Image)—— 容器(Container)
仓库在云端,有官方有个人的很多很多镜像
镜像运行成为容器
先弄一个自己的仓库吧,可以传上去传下来
申请一个Docker账号,就可以有自己的仓库(虽然事后证明,因为网速问题,并不可以传上去传下来)
Docker账号与代理
申请docker账号(不翻墙很慢)
代理加速(文章其中的docker login的账号密码应该docker的账号和密码)
Docker 仓库 操作
Docker login
:登录个人DockerDocker logout
:退出个人DockerDocker search XXXX
:从官方仓库个人仓库,搜索类似的镜像 比如Docker search ubuntu
Docker 文件<-->镜像<-->仓库-->-->
docker push [用户/仓库:标签]
:推送一个镜像到个人仓库docker pull [用户/仓库:标签]
:从仓库拉取一个镜像到本地docker save -o 文件 镜像
:镜像输出到文件docker load -i 文件
:文件读取成镜像
通过 Dockerfile 新建Docker镜像
在拥有Dockerfile的文件夹下运行docker build [options] PATH/URL
- -t images_name:指定镜像名字
- -f:指定Dockerfile文件,如果没有,默认在上下文中
- PATH/URL:指定本地上下文路径,或远程Dockerfile
关于Dockerfile的语法,在本文最后总结,这个比较难
Docker镜像 操作
docker images
:查看本地镜像docker rmi <image_name>
:删除本地镜像
docker镜像 –> 容器
docker run 镜像ID / 仓库名:标签名
:通过本地镜像生成容器
参数:
- -i:以交互模式运行容器
- -d:容器在后台运行
- -t:启动后进入命令行
- -p:端口映射
- -v:挂载文件,可以在外面操作里面的文件
- –rm:默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另外一方面,你也可以保存容器所产生的数据。但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。(与-d不能公用)
此外:
后面一般跟一个/bash/bin
这是表示载入容器后运行bash。
docker中必须要保持一个进程的运行,要不然整个容器就会退出。
有的镜像 不跟就会直接退出
端口映射
端口映射:使用-p
参数会分配宿主机的端口映射到虚拟机docker run -p ip:hostPort:containerPort
ip:宿主机的ip地址
hostPort:宿主机需要映射的端口
containerPort:虚拟机的端口
1 | docker run -p 127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。 |
检查端口
docker port cortainerid
:查看容器端口映射情况
Docker 容器文件<-->容器–>镜像/仓库-->
docker commit [参数] 容器ID [用户/仓库:标签]
:把容器固化成镜像
参数:
- -m 说明
- -a 作者信息
docker import -m "message" file|URL 名称
:从文件读入docker export -o "message" file|URL 名称
:读出到文件
Docker容器 操作
docker exec -i -t CONTAINER ID /bin/bash
跟docker run有一点类似docker ps
:查看运行中的container
- -a:查看所有容器包括停止状态的容器
docker start CONTAINER ID
docker stop CONTAINER ID
docker restart CONTAINER ID
ctrl + p then ctrl + q
:挂起正在运行中的容器的命令行docker attach CONTAINER ID
:链接正在运行的挂起容器docker rm <CONTAINER_ID/CONTAINER_NAME>
:删除容器
ps.CONTAINER ID:容器ID,可以缩写,即前几位
Docker容器 <--> 本机 传输文件-->
docker cp 本地文件路径 ID全称:容器路径
docker cp ID全称:容器文件路径 本地路径
Dockerfile 命令
FROM 指定基础镜像
格式:FROM <image>/<image>:<tag>
MAINTAINER 指定维护者信息
格式:MAINTAINER image_creator@docker.com
该信息会写入生成镜像的Author属性域中
WORKDIR 指定容器工作目录
格式:WORKDIR /path
COPY 复制文件
格式:COPY <源路径> <目标路径>
- 源路径:在上下文目录中,为上下文根目录的相对路径
- 目标路径:可以是容器内绝对路径,也可以是相对于工作目录的相对路径
ADD 高级复制文件
格式:ADD <源路径> <目标路径>
- 源路径:可以是URL,会先下载这个URL指向的文件到目标路径去取;如果是tar压缩文件,会自动解压
RUN 运行指定命令
格式:RUN <command> / RUN ['executable',"param1","param2"]
- 前者在shell中断中执行命令,即 /bin/sh -c
- 后者使用exec执行
每条RUN指令将在当前镜像的基础上执行指定命令并提交为新的镜像。
可以命令较长,可以使用\换行1
RUN apt-get update
CMD 指定启动容器时默认执行的命令
- CMD [“executable”,”param1”,”param2”] 使用exec执行,是推荐使用的方式
- CMD param1 param2 在/bin/sh中执行,提供给需要交互的应用;
- CMD [“param1”,”param2”] 提供给ENTRYPOINT的默认参数。
每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行。
ENTRYPOINT 容器的入口
当容器起来时自动执行的命令。
EXPOSE 声明端口监听
格式:EXPOSE <POST>
只起到声明的作用,不会自动完成端口映射。还是需要docker run -p来指定1
EXPOSE 22 80 443 3306 ##这些端口需要监听,即映射到外部
docker下利用linoda/lamp
mysql
service mysql start
mysql -u root -p
Admin2015
apache2 配置文件
/etc/apache2/apache2.conf
:apache2启动时自动读取文件/etc/apache2/sites-enabled
:指向sites-available文件的符号链接/etc/apache2/sites-available
:真正配置文件所在
如果apache上配置了多个虚拟主机,每个虚拟主机的配置文件都放在 sites-available下,那么对于虚拟主机的停用、启用就非常方便了。
当在sites-enabled下建立一个指向某个虚拟主机配置文件的链 接时,就启用了它;如果要关闭某个虚拟主机的话,只需删除相应的链接即可,根本不用去改配置文件。
删除/etc/apache2/sites-enabled下的文件
删除/etc/apache2/sites-available下的example什么的,修改000什么的修改网站根目录
restart
php
php -v
查看版本php -m
查看扩展
发现pdo-mysql扩展没有
网上一堆说重新编译,但是重新编译需要知道php安装路径,mysql安装路径,phpize一些东西,还需要下源码等
在别人的docker里,让人想死
其实
通过apt-get install php5-mysql
安装即可service apache2 restart