docker 搭建实战

作者: jaymz明 | 来源:发表于2018-04-12 18:40 被阅读89次

1.在docker中搭建mysql

    docker pull mysql

   首先下载mysql,如果下不下来,需要下面的阿里云加速器。在阿里云中注册一个账号,会生成对应的加速链接。贴成下图的方式。然后重启。

2.docker run -d -p 127.0.0.1:3306:3306 —name mysql -v /Users/jaymz/softwares/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

-v 是做数据持久化,挂在非docker容器的外部。

-e 是环境变量的设置。

执行完会生成一个image

3.可以用docker images查看

4.启动mysql服务

    docker start mysql

    docker exec -it mysql bash

    mysql -u root -p

    然后输入密码:123456

    就进入了mysql的客户端了,输入show databases。如下:


2.docker 搭建tomcat

    去中心仓库下载tomcat,可以先docker search tomcat,然后docker pull tomcat。

    然后启动docker run -p 8081:8080 tomcat.

    访问127.0.0.1:8081,出现下面界面,说明tomcat启动成功。

3.编写dockerfile,部署应用。

Dockerfile的指令是忽略大小写的,建议使用大写,使用#作为注释,每一行只支持一条指令,每条指令可以携带多个参数。

Dockerfile的指令根据作用可以分为两种:构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。

4.搭建nginx.

编写dockerfile:

        from nginx

maintainer jaymz.zou

env run_user nginx

env run_group nginx

env data_dir /data/web

env log_dir /data/log/nginx

run mkdir /data/log/nginx -p

run chown nginx.nginx -R /data/log/nginx

add /nginx/web /data/web

add /nginx/nginx.conf /etc/nginx/nginx.conf

add /nginx/default.conf /etc/nginx/conf.d/default.conf

expose 80

entrypoint nginx -g "daemon off;”

注:其中特别容易遇到的坑就是:add指令的时候会出现下面错误:

    ADD failed: stat /var/lib/docker/tmp/docker-builder657318362/nginx.conf: no such file or directory

解决办法:文件一定在dockerfile的同级目录下。否则会找不到引用的文件。

5.docker-compose

Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景。

它在启动container的时候和用docker run 的区别在于:compose会找以前已经存在的container,而run则每次都会新建一个实例。

实例:

首先在一个空的文件下建一个文件:docker-compose.yml, 然后编写一下命令,编排一个tomcat和mysql的容器。

编写完成后,执行docker-compose up。通过docker-compose ps,查看,可以发现两个容器都已经起好了。

有个比较坑的地方是要特别注意yaml的格式:用空格表示层级,同一层级的左对齐,千万不要用tab键!!!。前面加“-”表示一个数组或者对象。

编写命令:docker-compose down 可以是docker容器停止。

docker 配合jenkins 持续部署

Docker pull Jenkins

为jenkins在宿主机上创建一个目录:mkdir /jenkins,运行一个容器,如果遇到一下错误,则表明缺少权限。

docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id”jenkins

可以通过这个命令查看文件的所属权限

可以很容易发现宿主机该文件的权限其实是root,不是jenkins,我们需要把该文件的用户改为jenkins,这样挂载的时候才能成功。

sudo chown -R 1000 jenkins 就可以了

通过访问本地8080端口,可以看到jenkins成功的启动起来。

 选一个git 仓库,拿自己的git账户做个测试,并在项目中加个dockerfile文件。

在jenkins中编写build image命令

触发jenkins job,查看执行结果

最终我们可以在docker images中查看到新生成的images

当然,这个过程中遇到的问题:

    1.在jenkins中无法使用docker命令,会报没有此命令

        解决办法:需要在-v的时候将docker.sock 和docker都挂在到容器里。

    2.没有权限去打开或者修改/var/run/…    ,原由是容器里的用户没有权限去访问宿主机上的文件

        解决办法:在docker run的时候加个指定用户去执行 -u root,绕过了把jenkins用户加到用户组里报没有gpasswd或者groupadd命令。

docker run -p 8080:8080 -p 5000:5000 --name jenkins -v /Users/jaymz/Documents/software/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -u root jenkins

总的来说还是挺好玩的。

相关文章

网友评论

    本文标题:docker 搭建实战

    本文链接:https://www.haomeiwen.com/subject/zlyfkftx.html