1.了解Dockerfile基本操作
基本操作:
1.FROM指令:FROM : 指定创建镜像的基础镜像
$ FROM ubuntu:latest
2.ENTRYPOINT指令:默认入口命令,在启动容器时作为根命令执行
支持两种格式:
$ ENTRYPOINT ["executable","param1","param2"] (exec运行,推荐)
$ ENTRYPOINT command param1 param2 (shell运行,/bin/sh)
指定多个,最后一个生效
可以被–entrypoint 参数覆盖掉
3.CMD指令:只有一条,作为主进程,也是有同上两种形式
比如ubuntu镜像默认的CMD是/bin/bash,
如果docker run -it ubuntu cat /etc/os-release这就是用 输出系统版本信息指令 替换了 默认的/bin/bash命令,CMD大概就是这样的过程。
4.RUN指令:在当前镜像基础上运行指定命令,并提交为新的镜像,命令较长时可以使用\来换行
$ RUN apt-get update\
&& apt-get install -y libsnappy-dev\
&& rm -rf /var/cache/apt
注意及时删除一些临时文件和缓存文件,特别是在apt-get指令后,/var/cache/apt下面会缓存一些安装包。
5.ENV命令:指定环境变量,ENV < key>< value>或ENV< key>=< value>
$ ENV PG_MAJOR 9.3
6.VOLUME命令:创建一个数据卷挂载点
$ VOLUME ["/data"]
7.WORKDIR命令:为后续的RUN,CMD,ENTRYPOINT指定配置工作目录
参数是相对路径:
$ WORKDIR /a
$ WORKDIR b
$ WORKDIR c
实际路径:/a/b/c
声明镜像内服务所监听的端口,只是生命作用,并不会端口映射,可以使用容器中-P来完成端口映射。
8.ADD命令:将dockerfile 所在同一目录下的文件可以新建写入容器中 ADD sourcefile destfile
$ ADD authorized_keys /root/.ssh/authorized_keys
9.MAINTAINER命令:指定作者,格式如下
$ MAINTAINER docker_user (user@docker.com)
创建镜像:
1.创建Dockerfile文件,在任意路径下创建即可”Dockerfile”
2.输入如下创建命令即可
![这里写图片描述](https://img-blog.csdn.net/20171123223839319?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0MjMxOTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
2.使用两个链接在一起的容器运行Wordpress博客程序
首先下载相关镜像
$ sudo docker pull wordpress
$ sudo docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
85b1f47fba49: Already exists
5671503d4f93: Pull complete
3b43b3b913cb: Pull complete
4fbb803665d0: Pull complete
05808866e6f9: Pull complete
1d8c65d48cfa: Pull complete
e189e187b2b5: Pull complete
02d3e6011ee8: Pull complete
d43b32d5ce04: Pull complete
2a809168ab45: Pull complete
Digest: sha256:1a2f9361228e9b10b4c77a651b460828514845dc7ac51735b919c2c4aec864b7
Status: Downloaded newer image for mysql:latest
查看是否下载镜像,启动MySQL容器,通过设置MYSQL_ROOT_PASSWORD环境变量来设置密码。
$sudo docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpress -d mysql
8a34bd9e46a7f77c6a5fc9c685041065405dd504140a396041af7a23e274bd4d
将wordpress用–link方式链接到mysql容器,Docker会自动进行网络配置,让Wordpress能够访问到容器所暴露出来的端口。两个容器都会以守护态方式运行,wordpress容器的80端口会映射到宿主机的80端口。
$sudo docker run --name wordpress --link mysqlwp:mysql -p 80:80 -d wordpress
997a113f5c55882488e9e0f7176feb20d87fb88ad92272555fc92f3eb16c223a
之后使用ifconfig去查询docker host的ip
sudo ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
...
![这里写图片描述](https://img-blog.csdn.net/20171124094723996?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzc0MjMxOTg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
wordpress使用的是root用户这并不是一个好实践,创建一个名为wordpress的数据库
把之前的容器关闭删掉之后(关闭之后其链接的wordpress容器也会终止),创建容器如下
$sudo docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker \
> -e MYSQL_DATABASE=wordpress \
> -e MYSQL_USER=wordpress \
> -e MYSQL_PASSWORD=wordpresspwd \
> -v /home/docker/mysql:/var/lib/mysql \
> -d mysql
3346d944abb77b49760de11de72de60ba9d64d550eb29f63887e059dbe503d70
启动wordpress并指定你设置好的数据表
$ sudo docker run --name wordpress --link mysqlwp:mysql -p 80:80 \
> -e WORDPRESS_DB_NAME=wordpress \
> -e WORDPRESS_DB_USER=wordpress \
> -e WORDPRESS_DB_PASSWORD=wordpresspwd \
> -d wordpress
e91fb9e547aef33cb27c485f778cf3575fda088ea966723e79400598e199d755
(注意挂载到之前已经存在的目录下)
之后目录下会看到文件变动:
/home/docker/mysql$ ls
auto.cnf client-key.pem ib_logfile1 private_key.pem sys
ca-key.pem ib_buffer_pool ibtmp1 public_key.pem wordpress
ca.pem ibdata1 mysql server-cert.pem
client-cert.pem ib_logfile0 performance_schema server-key.pem
备份数据(使用exec mysqlwp再容器内,执行mysqldump完成备份
$ sudo docker exec mysqlwp mysqldump --all-databases \
> --password=wordpressdocker > wordpress.backup
在宿主机和容器之间共享数据($PWD表示当前绝对路径)挂载到宿主机上,在/bin/bash操作即可链接起来
$ sudo docker run -ti -v "$PWD":/docker ubuntu:latest /bin/bash
root@61c64c249bad:/# touch /docker/mysql
root@61c64c249bad:/# exit
exit