Docker使用

— docker安装使用 —
— linoda/lamp使用 —

出题需要….入坑….翻滚….翻滚…..坑中来回翻滚…

Docker安装

win7下docker安装及使用
kali下安装docker
官方文档(需要翻墙)

Docker层次

仓库(Repository)—— 镜像(Image)—— 容器(Container)
仓库在云端,有官方有个人的很多很多镜像
镜像运行成为容器
先弄一个自己的仓库吧,可以传上去传下来
申请一个Docker账号,就可以有自己的仓库(虽然事后证明,因为网速问题,并不可以传上去传下来)

Docker账号与代理

申请docker账号(不翻墙很慢)
代理加速(文章其中的docker login的账号密码应该docker的账号和密码)

Docker 仓库 操作

Docker login:登录个人Docker
Docker logout:退出个人Docker
Docker 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
2
3
docker run -p 127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。 
# 多个端口需要用多个-p 可以省略本机ip
docker run -p 1234:80 -p 1235:8001 -it cvs:try /bin/bash

检查端口

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全称:容器文件路径 本地路径

docker

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 ##这些端口需要监听,即映射到外部

其他Dockerfile命令

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