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
总的来说还是挺好玩的。
网友评论