您的位置:首页 > 运维架构 > Docker

Docker学习笔记(1)——Dockerfile创建镜像

2017-11-24 22:38 1081 查看

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.输入如下创建命令即可



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
...


连接http://172.17.0.1即可进入wordpress安装界面,安装成功后登录即可到主页面



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: