Compare commits

..

65 Commits

Author SHA1 Message Date
f3598c3c97 Merge pull request #805 from bestlong/fixing-php-fpm-ghostscript
Fixing php fpm ghostscript
2017-04-14 03:24:54 -04:00
4fd73ac512 Fix build error in php-fpm containers, after updating the base image 2017-04-14 03:23:19 -04:00
747f956d01 update php-fpm base image tags {requires rebuild} 2017-04-14 03:12:00 -04:00
1519d2c64c Update Dockerfile-71
fixing unexpected message "/bin/sh: 1: [: =: unexpected operator", #798.
2017-04-14 10:09:44 +08:00
43f4f80836 Update Dockerfile-70
fixing unexpected message "/bin/sh: 1: [: =: unexpected operator", #798.
2017-04-14 10:08:44 +08:00
ca7726c441 Update Dockerfile-56
fixing unexpected message "/bin/sh: 1: [: =: unexpected operator", #798.
2017-04-14 10:08:11 +08:00
c78eb5228a Merge pull request #803 from activeobjects/master
Added support for jenkins official container
2017-04-13 11:48:57 -04:00
81053c0868 Added support for jenkins official container 2017-04-12 15:54:42 +00:00
b1367d237f Merge pull request #800 from chrissiboi/master
Update Dockerfile-70
2017-04-12 10:19:34 +02:00
603207cc2b Update Dockerfile-70
fixes a built crash because of an unexpected &&
2017-04-12 10:17:06 +02:00
43e2b3e403 Merge pull request #795 from hounded/master
pdo_dblib
2017-04-12 00:53:51 -04:00
f69422e82f Merge branch 'master' into master 2017-04-12 00:53:43 -04:00
96e82d4115 Merge pull request #793 from winfried-van-loon/php-fpm-56-args
Fixing not-consumed buildargs php-fpm-56
2017-04-11 18:36:13 -07:00
6d4a2c4cc4 Merge pull request #789 from winfried-van-loon/php-fpm-cleanup
Fixing whitespaces and tailing spaces
2017-04-11 18:35:17 -07:00
f8e5f73e18 Merge pull request #794 from winfried-van-loon/xdebug-config
Moving php-fpm xdebug config to proper location
2017-04-11 18:35:03 -07:00
cdc2811d7b Merge pull request #796 from winfried-van-loon/already-loaded-warnings
Fixing the php ext already loaded warnings
2017-04-11 18:34:45 -07:00
32d26c3e10 Merge pull request #799 from winfried-van-loon/787-workspace-soap-warning
Fixing soap already loaded warning in workspace
2017-04-11 18:33:37 -07:00
b482d4d901 Merge pull request #783 from winfried-van-loon/php-fpm-71
Bringing Dockerfile 71 up-to-date with 70
2017-04-11 18:33:09 -07:00
ad00284a22 Removing ext enable aerospike error 2017-04-12 00:35:11 +02:00
a835c9e709 Fixing soap already loaded warning in workspace 2017-04-12 00:28:54 +02:00
597f922db7 Update Dockerfile-70 2017-04-12 09:20:06 +12:00
cdb456a9b5 Fixing indentation 2017-04-11 23:19:58 +02:00
714902d12a Moving php-fpm xdebug config to proper location 2017-04-11 23:17:21 +02:00
657d8535a6 Fixing not-consumed buildargs php-fpm-56
Should fix the following warning:
```
[Warning] One or more build-args [INSTALL_INTL INSTALL_PHPREDIS INSTALL_GHOSTSCRIPT] were not consumed
```
2017-04-11 23:15:09 +02:00
0594681760 Fixing the php ext already loaded warnings
Example:
```
warning: exif (exif.so) is already loaded!
```
2017-04-11 23:10:41 +02:00
f5478cfef5 Merge pull request #790 from winfried-van-loon/645-php-fpm-ghostscript
Fixing ghostscript env option
2017-04-11 12:57:44 -07:00
e10217c64d Fixing ghostscript env option
Forgot something :(.
2017-04-11 21:52:34 +02:00
f91def64d7 Fixing whitespaces and tailing spaces 2017-04-11 21:22:57 +02:00
f991123545 Merge pull request #788 from laradock/575-php-fpm-exif
Adding exif/redis to php-fpm 56 and 71
2017-04-11 15:01:43 -04:00
86ebbfbdd3 Adding exif/redis to php-fpm 56 and 71 2017-04-11 20:48:42 +02:00
a35287b367 Merge pull request #785 from winfried-van-loon/690-php-fpm-intl
Fixing INTL ext in php-fpm for php71
2017-04-11 13:24:43 -04:00
ddabb4620e Merge pull request #784 from winfried-van-loon/645-php-fpm-ghostscript
Fixing ghostscript env option
2017-04-11 13:24:29 -04:00
b86211d2d8 Merge pull request #781 from winfried-van-loon/764-780-php-fpm-mysql
Merging removed MySQL ext into MySQLi setting
2017-04-11 13:23:45 -04:00
0b414813aa Merge pull request #777 from bestlong/patch-1
use PHP71 build workspace get ERROR
2017-04-11 13:23:33 -04:00
7dbe65e5f8 Bringing Dockerfile 71 up-to-date with 70 2017-04-11 16:47:38 +02:00
ef38dd1532 Fixing ghostscript env option 2017-04-11 16:45:20 +02:00
4b91fb1212 Fixing INTL ext in php-fpm for php71 2017-04-11 16:42:27 +02:00
80a60d58cf Merging removed MySQL ext into MySQLi setting 2017-04-11 13:22:07 +02:00
1257f8830a use PHP71 build workspace get ERROR
fix #752, has a wrong comment string
2017-04-10 15:20:10 +08:00
8ed8bfdc2a Merge pull request #772 from winfried-van-loon/746-log-directories
Adding log directories to prevent errors
2017-04-09 18:56:47 -07:00
042eb9e5e8 Merge pull request #775 from bestlong/patch-1
Fixing can't login to PHPMyAdmin
2017-04-09 18:55:55 -07:00
15cac480fe Fixing can't login to PHPMyAdmin
fix #754, login to PHPMyAdmin get "#2005 - Unknown MySQL server host 'mysql' (-2)" error.
2017-04-10 09:50:53 +08:00
02e867c17d Adding log directories to prevent errors 2017-04-09 21:58:05 +02:00
d51cd31ebc Merge pull request #770 from mikeerickson/bugfix/769-linuxbrew-deployer
bugfix/769 fix linuxbrew, deployer configuration
2017-04-09 11:45:10 -07:00
ea354cf035 Update readme add: Winfried van Loon as Admin 2017-04-09 14:43:46 -04:00
0d4bacecd8 bugfix/769 fix linuxbrew, deployer configuration 2017-04-09 11:42:44 -07:00
86197c9b62 update docs: Improve docker speed on MAC using dinghy 2017-04-09 14:39:25 -04:00
f8fd92fb0a Merge pull request #766 from BrianDGLS/patch-1
fix typo in README.md
2017-04-09 12:26:41 -04:00
61b038e0d9 fix typo in README.md 2017-04-09 09:42:28 +01:00
5b60b7ffb8 Merge pull request #760 from bestlong/patch-1
fix php-fpm PHP56 can't enabled MySQL Support
2017-04-07 11:27:39 -04:00
6e1911bdd5 Merge pull request #758 from hounded/master
MySQL fix
2017-04-07 11:27:32 -04:00
d376074936 fix #759, php-fpm can't enabled MySQL Support
lost passthru parameter
2017-04-07 15:14:15 +08:00
64b985f005 Update docker-compose.yml 2017-04-07 14:27:15 +12:00
cc50339bcb Update docker-compose.yml 2017-04-07 14:25:40 +12:00
8820501644 Update Dockerfile 2017-04-07 14:24:15 +12:00
07021b01f4 Delete startup 2017-04-07 14:23:02 +12:00
13891a52dd Merge pull request #757 from hounded/master
Symfony support in workspace
2017-04-06 20:12:19 -04:00
a1bbe23800 Merge pull request #755 from if-kenn/master
remove /Volumes and /private entries for d4m-nfs from docs
2017-04-06 20:12:10 -04:00
2b5fdc00ee Update Dockerfile-70
install symfony and add alias for symfony
2017-04-07 10:22:26 +12:00
68ff573904 Update docker-compose.yml
Added Install_symfony
2017-04-07 10:20:19 +12:00
3a62814fdc Update env-example
added install symfony to workspace
2017-04-07 10:19:23 +12:00
da043ee0c4 remove /Volumes and /private entries
The /Volumes entry is not good with how NFS exports hierarchically.
The /private entry should not just be included by default.

45f1628be6
2017-04-06 09:20:22 -07:00
5cd6ea41f9 Merge pull request #751 from david-perez/master
Fix PHP Zip library installation
2017-04-05 20:54:17 -04:00
d321be888c Fix PHP Zip library installation 2017-04-05 15:06:47 +02:00
7230b11d3b Fixing specified Dockerfile name (#745) 2017-04-05 13:45:29 +08:00
51 changed files with 1902 additions and 179 deletions

View File

@ -42,7 +42,7 @@ Laradock uses [Hugo](https://gohugo.io/) as website generator tool, with the [Ma
1. Install [Hugo](https://gohugo.io/) on your machine (easy thing).
2. Open the `DOCUMENTATION/_settings/content` and search for the markdown file you want to edit (every folder represents a section in the menu).
3. Delete the `/docs` folder from the root.
4. When you finish editing, run the `hugo` command to generate the HTML docs (in the `/docs`).
4. When you finish editing, go to `DOCUMENTATION/_settings/` and run the `hugo` command to generate the HTML docs (inside new `/docs` folder).
### To Host the website locally
Go to `DOCUMENTATION/_settings` in your terminal and run `hugo serve` to host the website locally.

View File

@ -1349,15 +1349,36 @@ Moving from Docker Toolbox (VirtualBox) to Docker Native (for Mac/Windows). Requ
<br>
<a name="Speed-MacOS"></a>
## Improve speed on MacOS
Sharing code into Docker containers with osxfs have very poor performance compared to Linux. You can get around this issue by using NFS to share your files betwen your host and your container.
Sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:
> How to share files using NFS (d4m-nfs)
### Workaround A: using dinghy
[d4m-nfs](https://github.com/IFSight/d4m-nfs) automatically mount NFS volume instead of osxfs one.
[Dinghy](https://github.com/codekitchen/dinghy) creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.
Quick Setup giude, (we recommend you check their docs)
1) `brew tap codekitchen/dinghy`
2) `brew install dinghy`
3) `dinghy create --provider virtualbox` (must have virtualbox installed, but they support other providers if you prefer)
4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)
5) `docker-compose up ...`
### Workaround B: using d4m-nfs
[D4m-nfs](https://github.com/IFSight/d4m-nfs) automatically mount NFS volume instead of osxfs one.
1) Update the Docker [File Sharing] preferences:
@ -1375,14 +1396,12 @@ git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs
```txt
/Users:/Users
/Volumes:/Volumes
/private:/private
```
5) Create (or edit) the file `/etc/exports`, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the `d4m-nfs.sh` script before).
6) Run the `d4m-nfs.sh` script:
6) Run the `d4m-nfs.sh` script (might need Sudo):
```bash
~/d4m-nfs/d4m-nfs.sh
@ -1391,10 +1410,26 @@ git clone https://github.com/IFSight/d4m-nfs ~/d4m-nfs
That's it! Run your containers.. Example:
```bash
docker-compose up -d nginx mysql
docker-compose up ...
```
**Note:** If you faced any errors, try restarting Docker, and make sure you have no spaces in the `d4m-nfs-mounts.txt` file, and your `/etc/exports` file is clear.
*Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the `d4m-nfs-mounts.txt` file, and your `/etc/exports` file is clear.*
### Other good workarounds:
- [docker-sync](https://github.com/EugenMayer/docker-sync)
- Add more here..
More details about this issue [here](https://github.com/docker/for-mac/issues/77).

View File

@ -4,7 +4,7 @@
[![forthebadge](http://forthebadge.com/images/badges/built-by-developers.svg)](http://zalt.me)
Laradock is a Docker PHP development environment that facilitate running **PHP** Apps on **Docker**.
Laradock is a Docker PHP development environment that facilitates running **PHP** Apps on **Docker**.
## Documentation
@ -12,7 +12,7 @@ Laradock is a Docker PHP development environment that facilitate running **PHP**
## Credits
**Super Admins:**
**Admins / Maintainers:**
- [Mahmoud Zalt](https://github.com/Mahmoudz) (mahmoudz) [ [Twitter](https://twitter.com/Mahmoud_Zalt) | [Personal Site](http://zalt.me) | [LinkedIn](https://www.linkedin.com/in/mahmoudzalt) ]
- [Bo-Yi Wu](https://github.com/appleboy) (appleboy) [ [Twitter](https://twitter.com/appleboy) ]
@ -20,9 +20,10 @@ Laradock is a Docker PHP development environment that facilitate running **PHP**
- [Mike Erickson](https://github.com/mikeerickson) (mikeerickson)
- [Dwi Fahni Denni](https://github.com/zeroc0d3) (zeroc0d3)
- [Thor Erik](https://github.com/thorerik) (thorerik)
- [Winfried van Loon](https://github.com/winfried-van-loon) (winfried-van-loon)
- Contribute and join us!
**Amazing Contributors:**
**Contributors:**
- [Contributors](https://github.com/laradock/laradock/graphs/contributors)

View File

@ -26,15 +26,16 @@ services:
- COMPOSER_GLOBAL_INSTALL=${WORKSPACE_COMPOSER_GLOBAL_INSTALL}
- INSTALL_WORKSPACE_SSH=${WORKSPACE_INSTALL_WORKSPACE_SSH}
- INSTALL_LARAVEL_ENVOY=${WORKSPACE_INSTALL_LARAVEL_ENVOY}
- INSTALL_DEPLOYER=${WORKSPACE_INSTALL_LARAVEL_ENVOY}
- INSTALL_LINUXBREW=${WORKSPACE_INSTALL_LARAVEL_ENVOY}
- INSTALL_DEPLOYER=${WORKSPACE_INSTALL_DEPLOYER}
- INSTALL_LINUXBREW=${WORKSPACE_INSTALL_LINUXBREW}
- INSTALL_MC=${WORKSPACE_INSTALL_MC}
- INSTALL_SYMFONY=${WORKSPACE_INSTALL_SYMFONY}
- PUID=${WORKSPACE_PUID}
- PGID=${WORKSPACE_PGID}
- NODE_VERSION=${WORKSPACE_NODE_VERSION}
- YARN_VERSION=${WORKSPACE_YARN_VERSION}
- TZ=${WORKSPACE_TIMEZONE}
dockerfile: "dockerfile-${PHP_VERSION}"
dockerfile: "Dockerfile-${PHP_VERSION}"
volumes_from:
- applications
extra_hosts:
@ -65,7 +66,8 @@ services:
- INSTALL_MYSQLI=${PHP_FPM_INSTALL_MYSQLI}
- INSTALL_TOKENIZER=${PHP_FPM_INSTALL_TOKENIZER}
- INSTALL_INTL=${PHP_FPM_INSTALL_INTL}
dockerfile: "dockerfile-${PHP_VERSION}"
- INSTALL_GHOSTSCRIPT=${PHP_FPM_INSTALL_GHOSTSCRIPT}
dockerfile: "Dockerfile-${PHP_VERSION}"
volumes_from:
- applications
expose:
@ -80,6 +82,7 @@ services:
- backend
### PHP Worker Container #####################################
php-worker:
build:
context: ./php-worker
@ -165,11 +168,11 @@ services:
mysql:
build:
context: ./mysql
args:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
ports:
@ -390,6 +393,7 @@ services:
- "${PMA_DB_ENGINE}"
networks:
- frontend
- backend
### Adminer Container ####################################
@ -400,7 +404,7 @@ services:
depends_on:
- php-fpm
networks:
- frontend
- frontend
### pgAdmin Container #######################################
@ -513,6 +517,19 @@ services:
- proxy
- proxy2
### Jenkins ###################################################
jenkins:
build: ./jenkins
environment:
JAVA_OPTS: "-Djava.awt.headless=true"
ports:
- "${JENKINS_HOST_SLAVE_AGENT_PORT}:50000"
- "${JENKINS_HOST_HTTP_PORT}:8080"
privileged: true
volumes:
- ${JENKINS_HOME}:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
### Networks Setup ############################################
networks:

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Contributing - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">
@ -349,7 +349,7 @@ features, by not reporting duplicate issues.</em></p>
<li>Install <a href="https://gohugo.io/">Hugo</a> on your machine (easy thing).</li>
<li>Open the <code>DOCUMENTATION/_settings/content</code> and search for the markdown file you want to edit (every folder represents a section in the menu).</li>
<li>Delete the <code>/docs</code> folder from the root.</li>
<li>When you finish editing, run the <code>hugo</code> command to generate the HTML docs (in the <code>/docs</code>).</li>
<li>When you finish editing, go to <code>DOCUMENTATION/_settings/</code> and run the <code>hugo</code> command to generate the HTML docs (inside new <code>/docs</code> folder).</li>
</ol>
<h3 id="to-host-the-website-locally">To Host the website locally</h3>

View File

@ -52,7 +52,7 @@ features, by not reporting duplicate issues.&lt;/em&gt;&lt;/p&gt;
&lt;li&gt;Install &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; on your machine (easy thing).&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;DOCUMENTATION/_settings/content&lt;/code&gt; and search for the markdown file you want to edit (every folder represents a section in the menu).&lt;/li&gt;
&lt;li&gt;Delete the &lt;code&gt;/docs&lt;/code&gt; folder from the root.&lt;/li&gt;
&lt;li&gt;When you finish editing, run the &lt;code&gt;hugo&lt;/code&gt; command to generate the HTML docs (in the &lt;code&gt;/docs&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;When you finish editing, go to &lt;code&gt;DOCUMENTATION/_settings/&lt;/code&gt; and run the &lt;code&gt;hugo&lt;/code&gt; command to generate the HTML docs (inside new &lt;code&gt;/docs&lt;/code&gt; folder).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;to-host-the-website-locally&#34;&gt;To Host the website locally&lt;/h3&gt;

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Documentation - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">
@ -888,6 +888,18 @@ docker-compose up -d mariadb phpmyadmin
<p>2 - Open your browser and visit the localhost on port <strong>8080</strong>: <code>http://localhost:8080</code></p>
<p><br>
<a name="Use-Adminer"></a></p>
<h2 id="use-adminer">Use Adminer</h2>
<p>1 - Run the Adminer Container (<code>adminer</code>) with the <code>docker-compose up</code> command. Example:</p>
<pre><code class="language-bash">docker-compose up -d adminer
</code></pre>
<p>2 - Open your browser and visit the localhost on port <strong>8080</strong>: <code>http://localhost:8080</code></p>
<p><br>
<a name="Use-pgAdmin"></a></p>
@ -1401,13 +1413,27 @@ e) set it to <code>true</code></p>
<h2 id="improve-speed-on-macos">Improve speed on MacOS</h2>
<p>Sharing code into Docker containers with osxfs have very poor performance compared to Linux. You can get around this issue by using NFS to share your files betwen your host and your container.</p>
<p>Sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:</p>
<blockquote>
<p>How to share files using NFS (d4m-nfs)</p>
</blockquote>
<h3 id="workaround-a-using-dinghy">Workaround A: using dinghy</h3>
<p><a href="https://github.com/IFSight/d4m-nfs">d4m-nfs</a> automatically mount NFS volume instead of osxfs one.</p>
<p><a href="https://github.com/codekitchen/dinghy">Dinghy</a> creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.</p>
<p>Quick Setup giude, (we recommend you check their docs)</p>
<p>1) <code>brew tap codekitchen/dinghy</code></p>
<p>2) <code>brew install dinghy</code></p>
<p>3) <code>dinghy create --provider virtualbox</code> (must have virtualbox installed, but they support other providers if you prefer)</p>
<p>4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)</p>
<p>5) <code>docker-compose up ...</code></p>
<h3 id="workaround-b-using-d4m-nfs">Workaround B: using d4m-nfs</h3>
<p><a href="https://github.com/IFSight/d4m-nfs">D4m-nfs</a> automatically mount NFS volume instead of osxfs one.</p>
<p>1) Update the Docker [File Sharing] preferences:</p>
@ -1423,23 +1449,30 @@ e) set it to <code>true</code></p>
<p>4) Create (or edit) the file <code>~/d4m-nfs/etc/d4m-nfs-mounts.txt</code>, and write the follwing configuration in it:</p>
<pre><code class="language-txt">/Users:/Users
/Volumes:/Volumes
/private:/private
</code></pre>
<p>5) Create (or edit) the file <code>/etc/exports</code>, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the <code>d4m-nfs.sh</code> script before).</p>
<p>6) Run the <code>d4m-nfs.sh</code> script:</p>
<p>6) Run the <code>d4m-nfs.sh</code> script (might need Sudo):</p>
<pre><code class="language-bash">~/d4m-nfs/d4m-nfs.sh
</code></pre>
<p>That&rsquo;s it! Run your containers.. Example:</p>
<pre><code class="language-bash">docker-compose up -d nginx mysql
<pre><code class="language-bash">docker-compose up ...
</code></pre>
<p><strong>Note:</strong> If you faced any errors, try restarting Docker, and make sure you have no spaces in the <code>d4m-nfs-mounts.txt</code> file, and your <code>/etc/exports</code> file is clear.</p>
<p><em>Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the <code>d4m-nfs-mounts.txt</code> file, and your <code>/etc/exports</code> file is clear.</em></p>
<h3 id="other-good-workarounds">Other good workarounds:</h3>
<ul>
<li><a href="https://github.com/EugenMayer/docker-sync">docker-sync</a></li>
<li>Add more here..</li>
</ul>
<p>More details about this issue <a href="https://github.com/docker/for-mac/issues/77">here</a>.</p>
<p><br>
<a name="Common-Problems"></a></p>

View File

@ -591,6 +591,18 @@ docker-compose up -d mariadb phpmyadmin
&lt;p&gt;2 - Open your browser and visit the localhost on port &lt;strong&gt;8080&lt;/strong&gt;: &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Use-Adminer&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;use-adminer&#34;&gt;Use Adminer&lt;/h2&gt;
&lt;p&gt;1 - Run the Adminer Container (&lt;code&gt;adminer&lt;/code&gt;) with the &lt;code&gt;docker-compose up&lt;/code&gt; command. Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up -d adminer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2 - Open your browser and visit the localhost on port &lt;strong&gt;8080&lt;/strong&gt;: &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Use-pgAdmin&#34;&gt;&lt;/a&gt;&lt;/p&gt;
@ -1104,13 +1116,27 @@ e) set it to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;improve-speed-on-macos&#34;&gt;Improve speed on MacOS&lt;/h2&gt;
&lt;p&gt;Sharing code into Docker containers with osxfs have very poor performance compared to Linux. You can get around this issue by using NFS to share your files betwen your host and your container.&lt;/p&gt;
&lt;p&gt;Sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How to share files using NFS (d4m-nfs)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;workaround-a-using-dinghy&#34;&gt;Workaround A: using dinghy&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/IFSight/d4m-nfs&#34;&gt;d4m-nfs&lt;/a&gt; automatically mount NFS volume instead of osxfs one.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/codekitchen/dinghy&#34;&gt;Dinghy&lt;/a&gt; creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.&lt;/p&gt;
&lt;p&gt;Quick Setup giude, (we recommend you check their docs)&lt;/p&gt;
&lt;p&gt;1) &lt;code&gt;brew tap codekitchen/dinghy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2) &lt;code&gt;brew install dinghy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3) &lt;code&gt;dinghy create --provider virtualbox&lt;/code&gt; (must have virtualbox installed, but they support other providers if you prefer)&lt;/p&gt;
&lt;p&gt;4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)&lt;/p&gt;
&lt;p&gt;5) &lt;code&gt;docker-compose up ...&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;workaround-b-using-d4m-nfs&#34;&gt;Workaround B: using d4m-nfs&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/IFSight/d4m-nfs&#34;&gt;D4m-nfs&lt;/a&gt; automatically mount NFS volume instead of osxfs one.&lt;/p&gt;
&lt;p&gt;1) Update the Docker [File Sharing] preferences:&lt;/p&gt;
@ -1126,23 +1152,30 @@ e) set it to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;4) Create (or edit) the file &lt;code&gt;~/d4m-nfs/etc/d4m-nfs-mounts.txt&lt;/code&gt;, and write the follwing configuration in it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-txt&#34;&gt;/Users:/Users
/Volumes:/Volumes
/private:/private
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5) Create (or edit) the file &lt;code&gt;/etc/exports&lt;/code&gt;, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script before).&lt;/p&gt;
&lt;p&gt;6) Run the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script:&lt;/p&gt;
&lt;p&gt;6) Run the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script (might need Sudo):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;~/d4m-nfs/d4m-nfs.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it! Run your containers.. Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up -d nginx mysql
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you faced any errors, try restarting Docker, and make sure you have no spaces in the &lt;code&gt;d4m-nfs-mounts.txt&lt;/code&gt; file, and your &lt;code&gt;/etc/exports&lt;/code&gt; file is clear.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the &lt;code&gt;d4m-nfs-mounts.txt&lt;/code&gt; file, and your &lt;code&gt;/etc/exports&lt;/code&gt; file is clear.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;other-good-workarounds&#34;&gt;Other good workarounds:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/EugenMayer/docker-sync&#34;&gt;docker-sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add more here..&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More details about this issue &lt;a href=&#34;https://github.com/docker/for-mac/issues/77&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Common-Problems&#34;&gt;&lt;/a&gt;&lt;/p&gt;

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Getting Started - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">
@ -356,7 +356,7 @@
<ul>
<li><p>If you are not using Git yet for your project, you can use <code>git clone</code> instead of <code>git submodule</code>.</p></li>
<li><p>Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. <a href="#keep-tracking-Laradock">Check this</a></p></li>
<li><p>Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. <a href="http://laradock.io/documentation/#keep-track-of-your-laradock-changes">Check this</a></p></li>
</ul>
<p>Your folder structure should look like this:</p>
@ -394,8 +394,9 @@
<p><em>Or you can keep <code>default.conf</code> as it is, and create a separate config <code>my-site.conf</code> file for it.</em></p>
<p><strong>In case of Apache:</strong> :P
<br></p>
<p><strong>In case of Apache:</strong> :P</p>
<p><br></p>
<blockquote>
<p><strong>Now jump to the <a href="#Usage">Usage</a> section.</strong></p>
@ -448,8 +449,8 @@
<p>If you are using <strong>Docker Toolbox</strong> (VM), do one of the following:</p>
<ul>
<li>Upgrade to Docker <a href="https://www.docker.com/products/docker">Native</a> for Mac/Windows (Recommended). Check out <a href="#upgrading-laradock">Upgrading Laradock</a></li>
<li>Use Laradock v3.* (Visit the <code>Laradock-ToolBox</code> <a href="https://github.com/laradock/laradock/tree/Laradock-ToolBox">Branch</a>).</li>
<li>Upgrade to Docker <a href="https://www.docker.com/products/docker">Native</a> for Mac/Windows (Recommended). Check out <a href="http://laradock.io/documentation/#upgrading-laradock">Upgrading Laradock</a></li>
<li>Use Laradock v3.*. Visit the <a href="https://github.com/laradock/laradock/tree/LaraDock-ToolBox">LaraDock-ToolBox</a> branch. <em>(outdated)</em></li>
</ul>
<p><br></p>
@ -479,7 +480,7 @@
<p>You can select your own combination of containers form the list below:</p>
<blockquote>
<p><code>nginx</code>, <code>hhvm</code>, <code>php-fpm</code>, <code>mysql</code>, <code>redis</code>, <code>postgres</code>, <code>mariadb</code>, <code>neo4j</code>, <code>mongo</code>, <code>apache2</code>, <code>caddy</code>, <code>memcached</code>, <code>beanstalkd</code>, <code>beanstalkd-console</code>, <code>rabbitmq</code>, <code>beanstalkd-console</code>, <code>workspace</code>, <code>phpmyadmin</code>, <code>aerospike</code>, <code>pgadmin</code>, <code>elasticsearch</code>, <code>rethinkdb</code>, <code>postgres-postgis</code>, <code>certbot</code>, <code>mailhog</code>, <code>minio</code> and more&hellip;!</p>
<p><code>nginx</code>, <code>hhvm</code>, <code>php-fpm</code>, <code>mysql</code>, <code>redis</code>, <code>postgres</code>, <code>mariadb</code>, <code>neo4j</code>, <code>mongo</code>, <code>apache2</code>, <code>caddy</code>, <code>memcached</code>, <code>beanstalkd</code>, <code>beanstalkd-console</code>, <code>rabbitmq</code>, <code>beanstalkd-console</code>, <code>workspace</code>, <code>phpmyadmin</code>, <code>adminer</code>, <code>aerospike</code>, <code>pgadmin</code>, <code>elasticsearch</code>, <code>rethinkdb</code>, <code>postgres-postgis</code>, <code>certbot</code>, <code>mailhog</code>, <code>minio</code> and more&hellip;!</p>
</blockquote>
<p><em>(Please note that sometimes we forget to update the docs, so check the <code>docker-compose.yml</code> file to see an updated list of all available containers).</em></p>

View File

@ -59,7 +59,7 @@
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you are not using Git yet for your project, you can use &lt;code&gt;git clone&lt;/code&gt; instead of &lt;code&gt;git submodule&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. &lt;a href=&#34;#keep-tracking-Laradock&#34;&gt;Check this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. &lt;a href=&#34;http://laradock.io/documentation/#keep-track-of-your-laradock-changes&#34;&gt;Check this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your folder structure should look like this:&lt;/p&gt;
@ -97,8 +97,9 @@
&lt;p&gt;&lt;em&gt;Or you can keep &lt;code&gt;default.conf&lt;/code&gt; as it is, and create a separate config &lt;code&gt;my-site.conf&lt;/code&gt; file for it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In case of Apache:&lt;/strong&gt; :P
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In case of Apache:&lt;/strong&gt; :P&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Now jump to the &lt;a href=&#34;#Usage&#34;&gt;Usage&lt;/a&gt; section.&lt;/strong&gt;&lt;/p&gt;
@ -151,8 +152,8 @@
&lt;p&gt;If you are using &lt;strong&gt;Docker Toolbox&lt;/strong&gt; (VM), do one of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upgrade to Docker &lt;a href=&#34;https://www.docker.com/products/docker&#34;&gt;Native&lt;/a&gt; for Mac/Windows (Recommended). Check out &lt;a href=&#34;#upgrading-laradock&#34;&gt;Upgrading Laradock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use Laradock v3.* (Visit the &lt;code&gt;Laradock-ToolBox&lt;/code&gt; &lt;a href=&#34;https://github.com/laradock/laradock/tree/Laradock-ToolBox&#34;&gt;Branch&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Upgrade to Docker &lt;a href=&#34;https://www.docker.com/products/docker&#34;&gt;Native&lt;/a&gt; for Mac/Windows (Recommended). Check out &lt;a href=&#34;http://laradock.io/documentation/#upgrading-laradock&#34;&gt;Upgrading Laradock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use Laradock v3.*. Visit the &lt;a href=&#34;https://github.com/laradock/laradock/tree/LaraDock-ToolBox&#34;&gt;LaraDock-ToolBox&lt;/a&gt; branch. &lt;em&gt;(outdated)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
@ -182,7 +183,7 @@
&lt;p&gt;You can select your own combination of containers form the list below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;nginx&lt;/code&gt;, &lt;code&gt;hhvm&lt;/code&gt;, &lt;code&gt;php-fpm&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mariadb&lt;/code&gt;, &lt;code&gt;neo4j&lt;/code&gt;, &lt;code&gt;mongo&lt;/code&gt;, &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;caddy&lt;/code&gt;, &lt;code&gt;memcached&lt;/code&gt;, &lt;code&gt;beanstalkd&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;workspace&lt;/code&gt;, &lt;code&gt;phpmyadmin&lt;/code&gt;, &lt;code&gt;aerospike&lt;/code&gt;, &lt;code&gt;pgadmin&lt;/code&gt;, &lt;code&gt;elasticsearch&lt;/code&gt;, &lt;code&gt;rethinkdb&lt;/code&gt;, &lt;code&gt;postgres-postgis&lt;/code&gt;, &lt;code&gt;certbot&lt;/code&gt;, &lt;code&gt;mailhog&lt;/code&gt;, &lt;code&gt;minio&lt;/code&gt; and more&amp;hellip;!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nginx&lt;/code&gt;, &lt;code&gt;hhvm&lt;/code&gt;, &lt;code&gt;php-fpm&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mariadb&lt;/code&gt;, &lt;code&gt;neo4j&lt;/code&gt;, &lt;code&gt;mongo&lt;/code&gt;, &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;caddy&lt;/code&gt;, &lt;code&gt;memcached&lt;/code&gt;, &lt;code&gt;beanstalkd&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;workspace&lt;/code&gt;, &lt;code&gt;phpmyadmin&lt;/code&gt;, &lt;code&gt;adminer&lt;/code&gt;, &lt;code&gt;aerospike&lt;/code&gt;, &lt;code&gt;pgadmin&lt;/code&gt;, &lt;code&gt;elasticsearch&lt;/code&gt;, &lt;code&gt;rethinkdb&lt;/code&gt;, &lt;code&gt;postgres-postgis&lt;/code&gt;, &lt;code&gt;certbot&lt;/code&gt;, &lt;code&gt;mailhog&lt;/code&gt;, &lt;code&gt;minio&lt;/code&gt; and more&amp;hellip;!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;(Please note that sometimes we forget to update the docs, so check the &lt;code&gt;docker-compose.yml&lt;/code&gt; file to see an updated list of all available containers).&lt;/em&gt;&lt;/p&gt;
@ -217,7 +218,6 @@
&lt;p&gt;&lt;br&gt;
5 - Open your browser and visit your localhost address &lt;code&gt;http://localhost/&lt;/code&gt;. If you followed the multiple projects setup, you can visit &lt;code&gt;http://project-1.dev/&lt;/code&gt; and &lt;code&gt;http://project-2.dev/&lt;/code&gt;. But first don&amp;rsquo;t&lt;/p&gt;
</description>
</item>

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Help &amp; Questions - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">
@ -468,6 +468,7 @@ QUEUE_HOST=beanstalkd
<ul>
<li>PhpMyAdmin</li>
<li>Adminer</li>
<li>PgAdmin</li>
<li>ElasticSearch</li>
<li>Selenium</li>
@ -554,7 +555,7 @@ QUEUE_HOST=beanstalkd
<ul>
<li><p>If you are not using Git yet for your project, you can use <code>git clone</code> instead of <code>git submodule</code>.</p></li>
<li><p>Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. <a href="#keep-tracking-Laradock">Check this</a></p></li>
<li><p>Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. <a href="http://laradock.io/documentation/#keep-track-of-your-laradock-changes">Check this</a></p></li>
</ul>
<p>Your folder structure should look like this:</p>
@ -592,8 +593,9 @@ QUEUE_HOST=beanstalkd
<p><em>Or you can keep <code>default.conf</code> as it is, and create a separate config <code>my-site.conf</code> file for it.</em></p>
<p><strong>In case of Apache:</strong> :P
<br></p>
<p><strong>In case of Apache:</strong> :P</p>
<p><br></p>
<blockquote>
<p><strong>Now jump to the <a href="#Usage">Usage</a> section.</strong></p>
@ -646,8 +648,8 @@ QUEUE_HOST=beanstalkd
<p>If you are using <strong>Docker Toolbox</strong> (VM), do one of the following:</p>
<ul>
<li>Upgrade to Docker <a href="https://www.docker.com/products/docker">Native</a> for Mac/Windows (Recommended). Check out <a href="#upgrading-laradock">Upgrading Laradock</a></li>
<li>Use Laradock v3.* (Visit the <code>Laradock-ToolBox</code> <a href="https://github.com/laradock/laradock/tree/Laradock-ToolBox">Branch</a>).</li>
<li>Upgrade to Docker <a href="https://www.docker.com/products/docker">Native</a> for Mac/Windows (Recommended). Check out <a href="http://laradock.io/documentation/#upgrading-laradock">Upgrading Laradock</a></li>
<li>Use Laradock v3.*. Visit the <a href="https://github.com/laradock/laradock/tree/LaraDock-ToolBox">LaraDock-ToolBox</a> branch. <em>(outdated)</em></li>
</ul>
<p><br></p>
@ -677,7 +679,7 @@ QUEUE_HOST=beanstalkd
<p>You can select your own combination of containers form the list below:</p>
<blockquote>
<p><code>nginx</code>, <code>hhvm</code>, <code>php-fpm</code>, <code>mysql</code>, <code>redis</code>, <code>postgres</code>, <code>mariadb</code>, <code>neo4j</code>, <code>mongo</code>, <code>apache2</code>, <code>caddy</code>, <code>memcached</code>, <code>beanstalkd</code>, <code>beanstalkd-console</code>, <code>rabbitmq</code>, <code>beanstalkd-console</code>, <code>workspace</code>, <code>phpmyadmin</code>, <code>aerospike</code>, <code>pgadmin</code>, <code>elasticsearch</code>, <code>rethinkdb</code>, <code>postgres-postgis</code>, <code>certbot</code>, <code>mailhog</code>, <code>minio</code> and more&hellip;!</p>
<p><code>nginx</code>, <code>hhvm</code>, <code>php-fpm</code>, <code>mysql</code>, <code>redis</code>, <code>postgres</code>, <code>mariadb</code>, <code>neo4j</code>, <code>mongo</code>, <code>apache2</code>, <code>caddy</code>, <code>memcached</code>, <code>beanstalkd</code>, <code>beanstalkd-console</code>, <code>rabbitmq</code>, <code>beanstalkd-console</code>, <code>workspace</code>, <code>phpmyadmin</code>, <code>adminer</code>, <code>aerospike</code>, <code>pgadmin</code>, <code>elasticsearch</code>, <code>rethinkdb</code>, <code>postgres-postgis</code>, <code>certbot</code>, <code>mailhog</code>, <code>minio</code> and more&hellip;!</p>
</blockquote>
<p><em>(Please note that sometimes we forget to update the docs, so check the <code>docker-compose.yml</code> file to see an updated list of all available containers).</em></p>
@ -1293,6 +1295,18 @@ docker-compose up -d mariadb phpmyadmin
<p>2 - Open your browser and visit the localhost on port <strong>8080</strong>: <code>http://localhost:8080</code></p>
<p><br>
<a name="Use-Adminer"></a></p>
<h2 id="use-adminer">Use Adminer</h2>
<p>1 - Run the Adminer Container (<code>adminer</code>) with the <code>docker-compose up</code> command. Example:</p>
<pre><code class="language-bash">docker-compose up -d adminer
</code></pre>
<p>2 - Open your browser and visit the localhost on port <strong>8080</strong>: <code>http://localhost:8080</code></p>
<p><br>
<a name="Use-pgAdmin"></a></p>
@ -1806,13 +1820,27 @@ e) set it to <code>true</code></p>
<h2 id="improve-speed-on-macos">Improve speed on MacOS</h2>
<p>Sharing code into Docker containers with osxfs have very poor performance compared to Linux. You can get around this issue by using NFS to share your files betwen your host and your container.</p>
<p>Sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:</p>
<blockquote>
<p>How to share files using NFS (d4m-nfs)</p>
</blockquote>
<h3 id="workaround-a-using-dinghy">Workaround A: using dinghy</h3>
<p><a href="https://github.com/IFSight/d4m-nfs">d4m-nfs</a> automatically mount NFS volume instead of osxfs one.</p>
<p><a href="https://github.com/codekitchen/dinghy">Dinghy</a> creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.</p>
<p>Quick Setup giude, (we recommend you check their docs)</p>
<p>1) <code>brew tap codekitchen/dinghy</code></p>
<p>2) <code>brew install dinghy</code></p>
<p>3) <code>dinghy create --provider virtualbox</code> (must have virtualbox installed, but they support other providers if you prefer)</p>
<p>4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)</p>
<p>5) <code>docker-compose up ...</code></p>
<h3 id="workaround-b-using-d4m-nfs">Workaround B: using d4m-nfs</h3>
<p><a href="https://github.com/IFSight/d4m-nfs">D4m-nfs</a> automatically mount NFS volume instead of osxfs one.</p>
<p>1) Update the Docker [File Sharing] preferences:</p>
@ -1828,23 +1856,30 @@ e) set it to <code>true</code></p>
<p>4) Create (or edit) the file <code>~/d4m-nfs/etc/d4m-nfs-mounts.txt</code>, and write the follwing configuration in it:</p>
<pre><code class="language-txt">/Users:/Users
/Volumes:/Volumes
/private:/private
</code></pre>
<p>5) Create (or edit) the file <code>/etc/exports</code>, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the <code>d4m-nfs.sh</code> script before).</p>
<p>6) Run the <code>d4m-nfs.sh</code> script:</p>
<p>6) Run the <code>d4m-nfs.sh</code> script (might need Sudo):</p>
<pre><code class="language-bash">~/d4m-nfs/d4m-nfs.sh
</code></pre>
<p>That&rsquo;s it! Run your containers.. Example:</p>
<pre><code class="language-bash">docker-compose up -d nginx mysql
<pre><code class="language-bash">docker-compose up ...
</code></pre>
<p><strong>Note:</strong> If you faced any errors, try restarting Docker, and make sure you have no spaces in the <code>d4m-nfs-mounts.txt</code> file, and your <code>/etc/exports</code> file is clear.</p>
<p><em>Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the <code>d4m-nfs-mounts.txt</code> file, and your <code>/etc/exports</code> file is clear.</em></p>
<h3 id="other-good-workarounds">Other good workarounds:</h3>
<ul>
<li><a href="https://github.com/EugenMayer/docker-sync">docker-sync</a></li>
<li>Add more here..</li>
</ul>
<p>More details about this issue <a href="https://github.com/docker/for-mac/issues/77">here</a>.</p>
<p><br>
<a name="Common-Problems"></a></p>
@ -1949,6 +1984,7 @@ These Docker Compose projects have piqued our interest:</li>
<h2 id="i-have-a-question-problem">I have a Question/Problem</h2>
<p>If you have questions about how to use Laradock, please direct your questions to the discussion on <a href="https://gitter.im/Laradock/laradock">Gitter</a>. If you believe your question could help others, then consider opening an <a href="https://github.com/laradock/laradock/issues">Issue</a> (it will be labeled as <code>Question</code>) And you can still seek help on Gitter for it.</p>
<h2 id="i-found-an-issue">I found an Issue</h2>
<p>If have an issue or you found a typo in the documentation, you can help us by
@ -1979,7 +2015,7 @@ features, by not reporting duplicate issues.</em></p>
<li>Install <a href="https://gohugo.io/">Hugo</a> on your machine (easy thing).</li>
<li>Open the <code>DOCUMENTATION/_settings/content</code> and search for the markdown file you want to edit (every folder represents a section in the menu).</li>
<li>Delete the <code>/docs</code> folder from the root.</li>
<li>When you finish editing, run the <code>hugo</code> command to generate the HTML docs (in the <code>/docs</code>).</li>
<li>When you finish editing, go to <code>DOCUMENTATION/_settings/</code> and run the <code>hugo</code> command to generate the HTML docs (inside new <code>/docs</code> folder).</li>
</ol>
<h3 id="to-host-the-website-locally">To Host the website locally</h3>

View File

@ -170,6 +170,7 @@ QUEUE_HOST=beanstalkd
&lt;ul&gt;
&lt;li&gt;PhpMyAdmin&lt;/li&gt;
&lt;li&gt;Adminer&lt;/li&gt;
&lt;li&gt;PgAdmin&lt;/li&gt;
&lt;li&gt;ElasticSearch&lt;/li&gt;
&lt;li&gt;Selenium&lt;/li&gt;
@ -261,7 +262,7 @@ QUEUE_HOST=beanstalkd
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you are not using Git yet for your project, you can use &lt;code&gt;git clone&lt;/code&gt; instead of &lt;code&gt;git submodule&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. &lt;a href=&#34;#keep-tracking-Laradock&#34;&gt;Check this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note 2: To keep track of your Laradock changes, between your projects and also keep Laradock updated. &lt;a href=&#34;http://laradock.io/documentation/#keep-track-of-your-laradock-changes&#34;&gt;Check this&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Your folder structure should look like this:&lt;/p&gt;
@ -299,8 +300,9 @@ QUEUE_HOST=beanstalkd
&lt;p&gt;&lt;em&gt;Or you can keep &lt;code&gt;default.conf&lt;/code&gt; as it is, and create a separate config &lt;code&gt;my-site.conf&lt;/code&gt; file for it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In case of Apache:&lt;/strong&gt; :P
&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In case of Apache:&lt;/strong&gt; :P&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Now jump to the &lt;a href=&#34;#Usage&#34;&gt;Usage&lt;/a&gt; section.&lt;/strong&gt;&lt;/p&gt;
@ -353,8 +355,8 @@ QUEUE_HOST=beanstalkd
&lt;p&gt;If you are using &lt;strong&gt;Docker Toolbox&lt;/strong&gt; (VM), do one of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Upgrade to Docker &lt;a href=&#34;https://www.docker.com/products/docker&#34;&gt;Native&lt;/a&gt; for Mac/Windows (Recommended). Check out &lt;a href=&#34;#upgrading-laradock&#34;&gt;Upgrading Laradock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use Laradock v3.* (Visit the &lt;code&gt;Laradock-ToolBox&lt;/code&gt; &lt;a href=&#34;https://github.com/laradock/laradock/tree/Laradock-ToolBox&#34;&gt;Branch&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Upgrade to Docker &lt;a href=&#34;https://www.docker.com/products/docker&#34;&gt;Native&lt;/a&gt; for Mac/Windows (Recommended). Check out &lt;a href=&#34;http://laradock.io/documentation/#upgrading-laradock&#34;&gt;Upgrading Laradock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Use Laradock v3.*. Visit the &lt;a href=&#34;https://github.com/laradock/laradock/tree/LaraDock-ToolBox&#34;&gt;LaraDock-ToolBox&lt;/a&gt; branch. &lt;em&gt;(outdated)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
@ -384,7 +386,7 @@ QUEUE_HOST=beanstalkd
&lt;p&gt;You can select your own combination of containers form the list below:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;nginx&lt;/code&gt;, &lt;code&gt;hhvm&lt;/code&gt;, &lt;code&gt;php-fpm&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mariadb&lt;/code&gt;, &lt;code&gt;neo4j&lt;/code&gt;, &lt;code&gt;mongo&lt;/code&gt;, &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;caddy&lt;/code&gt;, &lt;code&gt;memcached&lt;/code&gt;, &lt;code&gt;beanstalkd&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;workspace&lt;/code&gt;, &lt;code&gt;phpmyadmin&lt;/code&gt;, &lt;code&gt;aerospike&lt;/code&gt;, &lt;code&gt;pgadmin&lt;/code&gt;, &lt;code&gt;elasticsearch&lt;/code&gt;, &lt;code&gt;rethinkdb&lt;/code&gt;, &lt;code&gt;postgres-postgis&lt;/code&gt;, &lt;code&gt;certbot&lt;/code&gt;, &lt;code&gt;mailhog&lt;/code&gt;, &lt;code&gt;minio&lt;/code&gt; and more&amp;hellip;!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;nginx&lt;/code&gt;, &lt;code&gt;hhvm&lt;/code&gt;, &lt;code&gt;php-fpm&lt;/code&gt;, &lt;code&gt;mysql&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, &lt;code&gt;postgres&lt;/code&gt;, &lt;code&gt;mariadb&lt;/code&gt;, &lt;code&gt;neo4j&lt;/code&gt;, &lt;code&gt;mongo&lt;/code&gt;, &lt;code&gt;apache2&lt;/code&gt;, &lt;code&gt;caddy&lt;/code&gt;, &lt;code&gt;memcached&lt;/code&gt;, &lt;code&gt;beanstalkd&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;rabbitmq&lt;/code&gt;, &lt;code&gt;beanstalkd-console&lt;/code&gt;, &lt;code&gt;workspace&lt;/code&gt;, &lt;code&gt;phpmyadmin&lt;/code&gt;, &lt;code&gt;adminer&lt;/code&gt;, &lt;code&gt;aerospike&lt;/code&gt;, &lt;code&gt;pgadmin&lt;/code&gt;, &lt;code&gt;elasticsearch&lt;/code&gt;, &lt;code&gt;rethinkdb&lt;/code&gt;, &lt;code&gt;postgres-postgis&lt;/code&gt;, &lt;code&gt;certbot&lt;/code&gt;, &lt;code&gt;mailhog&lt;/code&gt;, &lt;code&gt;minio&lt;/code&gt; and more&amp;hellip;!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;(Please note that sometimes we forget to update the docs, so check the &lt;code&gt;docker-compose.yml&lt;/code&gt; file to see an updated list of all available containers).&lt;/em&gt;&lt;/p&gt;
@ -1005,6 +1007,18 @@ docker-compose up -d mariadb phpmyadmin
&lt;p&gt;2 - Open your browser and visit the localhost on port &lt;strong&gt;8080&lt;/strong&gt;: &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Use-Adminer&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;use-adminer&#34;&gt;Use Adminer&lt;/h2&gt;
&lt;p&gt;1 - Run the Adminer Container (&lt;code&gt;adminer&lt;/code&gt;) with the &lt;code&gt;docker-compose up&lt;/code&gt; command. Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up -d adminer
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2 - Open your browser and visit the localhost on port &lt;strong&gt;8080&lt;/strong&gt;: &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Use-pgAdmin&#34;&gt;&lt;/a&gt;&lt;/p&gt;
@ -1518,13 +1532,27 @@ e) set it to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;improve-speed-on-macos&#34;&gt;Improve speed on MacOS&lt;/h2&gt;
&lt;p&gt;Sharing code into Docker containers with osxfs have very poor performance compared to Linux. You can get around this issue by using NFS to share your files betwen your host and your container.&lt;/p&gt;
&lt;p&gt;Sharing code into Docker containers with osxfs have very poor performance compared to Linux. Likely there are some workarounds:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How to share files using NFS (d4m-nfs)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;workaround-a-using-dinghy&#34;&gt;Workaround A: using dinghy&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/IFSight/d4m-nfs&#34;&gt;d4m-nfs&lt;/a&gt; automatically mount NFS volume instead of osxfs one.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/codekitchen/dinghy&#34;&gt;Dinghy&lt;/a&gt; creates its own VM using docker-machine, it will not modify your existing docker-machine VMs.&lt;/p&gt;
&lt;p&gt;Quick Setup giude, (we recommend you check their docs)&lt;/p&gt;
&lt;p&gt;1) &lt;code&gt;brew tap codekitchen/dinghy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2) &lt;code&gt;brew install dinghy&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;3) &lt;code&gt;dinghy create --provider virtualbox&lt;/code&gt; (must have virtualbox installed, but they support other providers if you prefer)&lt;/p&gt;
&lt;p&gt;4) after the above command is done it will display some env variables, copy them to the bash profile or zsh or.. (this will instruct docker to use the server running inside the VM)&lt;/p&gt;
&lt;p&gt;5) &lt;code&gt;docker-compose up ...&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;workaround-b-using-d4m-nfs&#34;&gt;Workaround B: using d4m-nfs&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/IFSight/d4m-nfs&#34;&gt;D4m-nfs&lt;/a&gt; automatically mount NFS volume instead of osxfs one.&lt;/p&gt;
&lt;p&gt;1) Update the Docker [File Sharing] preferences:&lt;/p&gt;
@ -1540,23 +1568,30 @@ e) set it to &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;4) Create (or edit) the file &lt;code&gt;~/d4m-nfs/etc/d4m-nfs-mounts.txt&lt;/code&gt;, and write the follwing configuration in it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-txt&#34;&gt;/Users:/Users
/Volumes:/Volumes
/private:/private
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5) Create (or edit) the file &lt;code&gt;/etc/exports&lt;/code&gt;, make sure it exists and is empty. (There may be collisions if you come from Vagrant or if you already executed the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script before).&lt;/p&gt;
&lt;p&gt;6) Run the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script:&lt;/p&gt;
&lt;p&gt;6) Run the &lt;code&gt;d4m-nfs.sh&lt;/code&gt; script (might need Sudo):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;~/d4m-nfs/d4m-nfs.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it! Run your containers.. Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up -d nginx mysql
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;docker-compose up ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you faced any errors, try restarting Docker, and make sure you have no spaces in the &lt;code&gt;d4m-nfs-mounts.txt&lt;/code&gt; file, and your &lt;code&gt;/etc/exports&lt;/code&gt; file is clear.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you faced any errors, try restarting Docker, and make sure you have no spaces in the &lt;code&gt;d4m-nfs-mounts.txt&lt;/code&gt; file, and your &lt;code&gt;/etc/exports&lt;/code&gt; file is clear.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;other-good-workarounds&#34;&gt;Other good workarounds:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/EugenMayer/docker-sync&#34;&gt;docker-sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add more here..&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More details about this issue &lt;a href=&#34;https://github.com/docker/for-mac/issues/77&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
&lt;a name=&#34;Common-Problems&#34;&gt;&lt;/a&gt;&lt;/p&gt;
@ -1707,12 +1742,13 @@ features, by not reporting duplicate issues.&lt;/em&gt;&lt;/p&gt;
&lt;li&gt;Install &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; on your machine (easy thing).&lt;/li&gt;
&lt;li&gt;Open the &lt;code&gt;DOCUMENTATION/_settings/content&lt;/code&gt; and search for the markdown file you want to edit (every folder represents a section in the menu).&lt;/li&gt;
&lt;li&gt;Delete the &lt;code&gt;/docs&lt;/code&gt; folder from the root.&lt;/li&gt;
&lt;li&gt;When you finish editing, run the &lt;code&gt;hugo&lt;/code&gt; command to generate the HTML docs (in the &lt;code&gt;/docs&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;When you finish editing, go to &lt;code&gt;DOCUMENTATION/_settings/&lt;/code&gt; and run the &lt;code&gt;hugo&lt;/code&gt; command to generate the HTML docs (inside new &lt;code&gt;/docs&lt;/code&gt; folder).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;to-host-the-website-locally&#34;&gt;To Host the website locally&lt;/h3&gt;
&lt;p&gt;Go to &lt;code&gt;DOCUMENTATION/_settings&lt;/code&gt; in your terminal and run &lt;code&gt;hugo serve&lt;/code&gt; to host the website locally.&lt;/p&gt;
&lt;h3 id=&#34;edit-the-sidebar&#34;&gt;Edit the sidebar&lt;/h3&gt;
&lt;p&gt;To add a new section to the sidebar or edit existing one, you need to edit this file &lt;code&gt;DOCUMENTATION/_settings/config.toml&lt;/code&gt;.&lt;/p&gt;

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Introduction - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">
@ -467,6 +467,7 @@ QUEUE_HOST=beanstalkd
<ul>
<li>PhpMyAdmin</li>
<li>Adminer</li>
<li>PgAdmin</li>
<li>ElasticSearch</li>
<li>Selenium</li>

View File

@ -170,6 +170,7 @@ QUEUE_HOST=beanstalkd
&lt;ul&gt;
&lt;li&gt;PhpMyAdmin&lt;/li&gt;
&lt;li&gt;Adminer&lt;/li&gt;
&lt;li&gt;PgAdmin&lt;/li&gt;
&lt;li&gt;ElasticSearch&lt;/li&gt;
&lt;li&gt;Selenium&lt;/li&gt;

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>License - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">

View File

@ -10,7 +10,7 @@
<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=10" />
<title>Related Projects - Laradock</title>
<meta name="generator" content="Hugo 0.18.1" />
<meta name="generator" content="Hugo 0.19" />
<meta name="description" content="Laradock documentations.">

View File

@ -26,6 +26,7 @@ WORKSPACE_INSTALL_LARAVEL_ENVOY=false
WORKSPACE_INSTALL_DEPLOYER=false
WORKSPACE_INSTALL_LINUXBREW=false
WORKSPACE_INSTALL_MC=false
WORKSPACE_INSTALL_SYMFONY=false
WORKSPACE_PUID=1000
WORKSPACE_PGID=1000
WORKSPACE_NODE_VERSION=stable
@ -45,9 +46,9 @@ PHP_FPM_INSTALL_OPCACHE=false
PHP_FPM_INSTALL_EXIF=false
PHP_FPM_INSTALL_AEROSPIKE_EXTENSION=false
PHP_FPM_INSTALL_MYSQLI=false
PHP_FPM_INSTALL_MYSQL=false
PHP_FPM_INSTALL_TOKENIZER=false
PHP_FPM_INSTALL_INTL=false
PHP_FPM_INSTALL_GHOSTSCRIPT=false
### NGINX Container
NGINX_HOST_HTTP_PORT=80
@ -145,6 +146,11 @@ VARNISH_PROXY2_SERVER=SERVER2
### HAPROXY Container
HAPROXY_HOST_HTTP_PORT=8085
### JENKINS Container
JENKINS_HOST_HTTP_PORT=8090
JENKINS_HOST_SLAVE_AGENT_PORT=50000
JENKINS_HOME=./jenkins/jenkins_home
### MISC
# Replace with your Docker Host IP (will be appended to /etc/hosts)
DOCKER_HOST_IP=10.0.75.1

23
jenkins/.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,23 @@
# Issues and Contributing
Please note that only issues related to this Docker image will be addressed here.
* If you have Docker related issues, please ask in the [Docker user mailing list](https://groups.google.com/forum/#!forum/docker-user).
* If you have Jenkins related issues, please ask in the [Jenkins mailing lists](https://jenkins-ci.org/content/mailing-lists).
* If you are not sure, then this is probably not the place to create an issue and you should use any of the previously mentioned mailing lists.
If after going through the previous checklist you still think you should create an issue here please provide:
### Docker commands that you execute
### Actual result
### Expected outcome
### Have you tried a non-dockerized Jenkins and get the expected outcome?
### Output of `docker version`
### Other relevant information

6
jenkins/.gitmodules vendored Normal file
View File

@ -0,0 +1,6 @@
[submodule "tests/test_helper/bats-support"]
path = tests/test_helper/bats-support
url = https://github.com/ztombol/bats-support
[submodule "tests/test_helper/bats-assert"]
path = tests/test_helper/bats-assert
url = https://github.com/ztombol/bats-assert

16
jenkins/CONTRIBUTING.md Normal file
View File

@ -0,0 +1,16 @@
# Issues and Contributing
Please note that only issues related to this Docker image will be addressed here.
* If you have Docker related issues, please ask in the [Docker user mailing list](https://groups.google.com/forum/#!forum/docker-user).
* If you have Jenkins related issues, please ask in the [Jenkins mailing lists](https://jenkins-ci.org/content/mailing-lists).
* If you are not sure, then this is probably not the place to create an issue and you should use any of the previously mentioned mailing lists.
If after going through the previous checklist you still think you should create an issue here please provide:
* Docker commands that you execute
* Actual result
* Expected outcome
* Have you tried a non-dockerized Jenkins and get the expected outcome?
* Output of `docker version`
* Other relevant information

108
jenkins/Dockerfile Normal file
View File

@ -0,0 +1,108 @@
FROM openjdk:8-jdk
RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
ENV JENKINS_HOME /var/jenkins_home
ENV JENKINS_SLAVE_AGENT_PORT 50000
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
# Jenkins is run with user `jenkins`, uid = 1000
# If you bind mount a volume from the host or a data container,
# ensure you use the same uid
RUN groupadd -g ${gid} ${group} \
&& useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
# Jenkins home directory is a volume, so configuration and build history
# can be persisted and survive image upgrades
VOLUME /var/jenkins_home
# `/usr/share/jenkins/ref/` contains all reference configuration we want
# to set on a fresh new installation. Use it to bundle additional plugins
# or config file with your custom jenkins Docker image.
RUN mkdir -p /usr/share/jenkins/ref/init.groovy.d
ENV TINI_VERSION 0.13.2
ENV TINI_SHA afbf8de8a63ce8e4f18cb3f34dfdbbd354af68a1
# Use tini as subreaper in Docker container to adopt zombie processes
RUN curl -fsSL https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-static-amd64 -o /bin/tini && chmod +x /bin/tini \
&& echo "$TINI_SHA /bin/tini" | sha1sum -c -
COPY init.groovy /usr/share/jenkins/ref/init.groovy.d/tcp-slave-agent-port.groovy
# jenkins version being bundled in this docker image
ARG JENKINS_VERSION
ENV JENKINS_VERSION ${JENKINS_VERSION:-2.32.3}
# jenkins.war checksum, download will be validated using it
ARG JENKINS_SHA=a25b9a314ca9e76f9673da7309e1882e32674223
# Can be used to customize where jenkins.war get downloaded from
ARG JENKINS_URL=https://repo.jenkins-ci.org/public/org/jenkins-ci/main/jenkins-war/${JENKINS_VERSION}/jenkins-war-${JENKINS_VERSION}.war
# could use ADD but this one does not check Last-Modified header neither does it allow to control checksum
# see https://github.com/docker/docker/issues/8331
RUN curl -fsSL ${JENKINS_URL} -o /usr/share/jenkins/jenkins.war \
&& echo "${JENKINS_SHA} /usr/share/jenkins/jenkins.war" | sha1sum -c -
ENV JENKINS_UC https://updates.jenkins.io
RUN chown -R ${user} "$JENKINS_HOME" /usr/share/jenkins/ref
# Add jenkins to the correct group
# see http://stackoverflow.com/questions/42164653/docker-in-docker-permissions-error
# use "getent group docker | awk -F: '{printf "%d\n", $3}'" command on host to find correct value for gid or simply use 'id'
ARG DOCKER_GID=998
RUN groupadd -g ${DOCKER_GID} docker \
&& curl -sSL https://get.docker.com/ | sh \
&& apt-get -q autoremove \
&& apt-get -q clean -y \
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin
# Install Docker-in-Docker from git@github.com:jpetazzo/dind.git
# RUN apt-get update -qq && apt-get install -qqy apt-transport-https ca-certificates curl lxc iptables
# Install Docker from Docker Inc. repositories.
RUN apt-get install -y curl && curl -sSL https://get.docker.com/ | sh
RUN usermod -aG docker jenkins
# Install Docker-Compose
RUN curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose
# for main web interface:
EXPOSE 8080
# will be used by attached slave agents:
EXPOSE 50000
ENV COPY_REFERENCE_FILE_LOG $JENKINS_HOME/copy_reference_file.log
USER ${user}
COPY jenkins-support /usr/local/bin/jenkins-support
COPY jenkins.sh /usr/local/bin/jenkins.sh
ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]
# from a derived Dockerfile, can use `RUN plugins.sh active.txt` to setup /usr/share/jenkins/ref/plugins from a support bundle
COPY plugins.sh /usr/local/bin/plugins.sh
COPY install-plugins.sh /usr/local/bin/install-plugins.sh
# Only need below if we are starting from empty jenkins_home
## Copy the RSA keys
#RUN mkdir -p /var/jenkins_home/.ssh
#RUN chown jenkins:jenkins /var/jenkins_home/.ssh
#COPY keys/id_rsa /var/jenkins_home/.ssh/id_rsa.pub
#COPY keys/id_rsa /var/jenkins_home/.ssh/id_rsa
#COPY keys/known_hosts /var/jenkins_home/.ssh/known_hosts
#
#USER root
#RUN chmod 600 /var/jenkins_home/.ssh/id_rsa
#RUN chmod 644 /var/jenkins_home/.ssh/id_rsa.pub
## ssh-keyscan -H github.com >> ~/.ssh/known_hosts
## ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts

38
jenkins/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,38 @@
#!/usr/bin/env groovy
properties([
buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5')),
pipelineTriggers([cron('@daily')]),
])
node('docker') {
deleteDir()
stage('Checkout') {
checkout scm
}
if (!infra.isTrusted()) {
/* Outside of the trusted.ci environment, we're building and testing
* the Dockerful in this repository, but not publishing to docker hub
*/
stage('Build') {
docker.build('jenkins')
}
stage('Test') {
sh """
git submodule update --init --recursive
git clone https://github.com/sstephenson/bats.git
bats/bin/bats tests
"""
}
} else {
/* In our trusted.ci environment we only want to be publishing our
* containers from artifacts
*/
stage('Publish') {
sh './publish.sh'
}
}
}

226
jenkins/README.md Normal file
View File

@ -0,0 +1,226 @@
# Official Jenkins Docker image
The Jenkins Continuous Integration and Delivery server.
This is a fully functional Jenkins server, based on the Long Term Support release.
[http://jenkins.io/](http://jenkins.io/).
For weekly releases check out [`jenkinsci/jenkins`](https://hub.docker.com/r/jenkinsci/jenkins/)
<img src="http://jenkins-ci.org/sites/default/files/jenkins_logo.png"/>
# Usage
```
docker run -p 8080:8080 -p 50000:50000 jenkins
```
NOTE: read below the _build executors_ part for the role of the `50000` port mapping.
This will store the workspace in /var/jenkins_home. All Jenkins data lives in there - including plugins and configuration.
You will probably want to make that an explicit volume so you can manage it and attach to another container for upgrades :
```
docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins
```
this will automatically create a 'jenkins_home' volume on docker host, that will survive container stop/restart/deletion.
Avoid using a bind mount from a folder on host into `/var/jenkins_home`, as this might result in file permission issue. If you _really_ need to bind mount jenkins_home, ensure that directory on host is accessible by the jenkins user in container (jenkins user - uid 1000) or use `-u some_other_user` parameter with `docker run`.
## Backing up data
If you bind mount in a volume - you can simply back up that directory
(which is jenkins_home) at any time.
This is highly recommended. Treat the jenkins_home directory as you would a database - in Docker you would generally put a database on a volume.
If your volume is inside a container - you can use ```docker cp $ID:/var/jenkins_home``` command to extract the data, or other options to find where the volume data is.
Note that some symlinks on some OSes may be converted to copies (this can confuse jenkins with lastStableBuild links etc)
For more info check Docker docs section on [Managing data in containers](https://docs.docker.com/engine/tutorials/dockervolumes/)
# Setting the number of executors
You can specify and set the number of executors of your Jenkins master instance using a groovy script. By default its set to 2 executors, but you can extend the image and change it to your desired number of executors :
`executors.groovy`
```
import jenkins.model.*
Jenkins.instance.setNumExecutors(5)
```
and `Dockerfile`
```
FROM jenkins
COPY executors.groovy /usr/share/jenkins/ref/init.groovy.d/executors.groovy
```
# Attaching build executors
You can run builds on the master out of the box.
But if you want to attach build slave servers **through JNLP (Java Web Start)**: make sure you map the port: ```-p 50000:50000``` - which will be used when you connect a slave agent.
If you are only using [SSH slaves](https://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin), then you do **NOT** need to put that port mapping.
# Passing JVM parameters
You might need to customize the JVM running Jenkins, typically to pass system properties or tweak heap memory settings. Use JAVA_OPTS environment
variable for this purpose :
```
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com jenkins
```
# Configuring logging
Jenkins logging can be configured through a properties file and `java.util.logging.config.file` Java property.
For example:
```
mkdir data
cat > data/log.properties <<EOF
handlers=java.util.logging.ConsoleHandler
jenkins.level=FINEST
java.util.logging.ConsoleHandler.level=FINEST
EOF
docker run --name myjenkins -p 8080:8080 -p 50000:50000 --env JAVA_OPTS="-Djava.util.logging.config.file=/var/jenkins_home/log.properties" -v `pwd`/data:/var/jenkins_home jenkins
```
# Configuring reverse proxy
If you want to install Jenkins behind a reverse proxy with prefix, example: mysite.com/jenkins, you need to add environnement variable `JENKINS_OPTS="--prefix=/jenkins"` and then follow the below procedures to configure your reverse proxy, which will depend if you have Apache ou Nginx:
- [Apache](https://wiki.jenkins-ci.org/display/JENKINS/Running+Jenkins+behind+Apache)
- [Nginx](https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy)
# Passing Jenkins launcher parameters
Argument you pass to docker running the jenkins image are passed to jenkins launcher, so you can run for sample :
```
docker run jenkins --version
```
This will dump Jenkins version, just like when you run jenkins as an executable war.
You also can define jenkins arguments as `JENKINS_OPTS`. This is usefull to define a set of arguments to pass to jenkins launcher as you
define a derived jenkins image based on the official one with some customized settings. The following sample Dockerfile uses this option
to force use of HTTPS with a certificate included in the image
```
FROM jenkins:1.565.3
COPY https.pem /var/lib/jenkins/cert
COPY https.key /var/lib/jenkins/pk
ENV JENKINS_OPTS --httpPort=-1 --httpsPort=8083 --httpsCertificate=/var/lib/jenkins/cert --httpsPrivateKey=/var/lib/jenkins/pk
EXPOSE 8083
```
You can also change the default slave agent port for jenkins by defining `JENKINS_SLAVE_AGENT_PORT` in a sample Dockerfile.
```
FROM jenkins:1.565.3
ENV JENKINS_SLAVE_AGENT_PORT 50001
```
or as a parameter to docker,
```
docker run --name myjenkins -p 8080:8080 -p 50001:50001 --env JENKINS_SLAVE_AGENT_PORT=50001 jenkins
```
# Installing more tools
You can run your container as root - and install via apt-get, install as part of build steps via jenkins tool installers, or you can create your own Dockerfile to customise, for example:
```
FROM jenkins
# if we want to install via apt
USER root
RUN apt-get update && apt-get install -y ruby make more-thing-here
# drop back to the regular jenkins user - good practice
USER jenkins
```
In such a derived image, you can customize your jenkins instance with hook scripts or additional plugins.
For this purpose, use `/usr/share/jenkins/ref` as a place to define the default JENKINS_HOME content you
wish the target installation to look like :
```
FROM jenkins
COPY custom.groovy /usr/share/jenkins/ref/init.groovy.d/custom.groovy
```
## Preinstalling plugins
You can rely on the `install-plugins.sh` script to pass a set of plugins to download with their dependencies.
Use plugin artifact ID, whithout `-plugin` extension, and append the version if needed separated by `:`.
Dependencies that are already included in the Jenkins war will only be downloaded if their required version is newer than the one included.
```
FROM jenkins
RUN /usr/local/bin/install-plugins.sh docker-slaves github-branch-source:1.8
```
When jenkins container starts, it will check `JENKINS_HOME` has this reference content, and copy them
there if required. It will not override such files, so if you upgraded some plugins from UI they won't
be reverted on next start.
In case you *do* want to override, append '.override' to the name of the reference file. E.g. a file named
`/usr/share/jenkins/ref/config.xml.override` will overwrite an existing `config.xml` file in JENKINS_HOME.
Also see [JENKINS-24986](https://issues.jenkins-ci.org/browse/JENKINS-24986)
Here is an example to get the list of plugins from an existing server:
```
JENKINS_HOST=username:password@myhost.com:port
curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'|sed 's/ /:/'
```
Example Output:
```
cucumber-testresult-plugin:0.8.2
pam-auth:1.1
matrix-project:1.4.1
script-security:1.13
...
```
For 2.x-derived images, you may also want to
RUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
to indicate that this Jenkins installation is fully configured.
Otherwise a banner will appear prompting the user to install additional plugins,
which may be inappropriate.
# Upgrading
All the data needed is in the /var/jenkins_home directory - so depending on how you manage that - depends on how you upgrade. Generally - you can copy it out - and then "docker pull" the image again - and you will have the latest LTS - you can then start up with -v pointing to that data (/var/jenkins_home) and everything will be as you left it.
As always - please ensure that you know how to drive docker - especially volume handling!
## Upgrading plugins
By default, plugins will be upgraded if they haven't been upgraded manually and if the version from the docker image is newer than the version in the container. Versions installed by the docker image are tracked through a marker file.
The default behaviour when upgrading from a docker image that didn't write marker files is to leave existing plugins in place. If you want to upgrade existing plugins without marker you may run the docker image with `-e TRY_UPGRADE_IF_NO_MARKER=true`. Then plugins will be upgraded if the version provided by the docker image is newer.
# Building
Build with the usual
docker build -t jenkins .
Tests are written using [bats](https://github.com/sstephenson/bats) under the `tests` dir
bats tests
Bats can be easily installed with `brew install bats` on OS X
# Questions?
Jump on irc.freenode.net and the #jenkins room. Ask!

View File

@ -0,0 +1,14 @@
master:
build: .
environment:
JAVA_OPTS: "-Djava.awt.headless=true"
ports:
- "50000:50000"
# Expose Jenkins to parent on port 8090
- "8090:8080"
# Allow Docker In Docker
privileged: true
volumes:
- ./jenkins_home:/var/jenkins_home
# Allow Docker In Docker to use parent docker container
- /var/run/docker.sock:/var/run/docker.sock

12
jenkins/init.groovy Normal file
View File

@ -0,0 +1,12 @@
import hudson.model.*;
import jenkins.model.*;
Thread.start {
sleep 10000
println "--> setting agent port for jnlp"
def env = System.getenv()
int port = env['JENKINS_SLAVE_AGENT_PORT'].toInteger()
Jenkins.instance.setSlaveAgentPort(port)
println "--> setting agent port for jnlp... done"
}

205
jenkins/install-plugins.sh Normal file
View File

@ -0,0 +1,205 @@
#!/bin/bash -eu
# Resolve dependencies and download plugins given on the command line
#
# FROM jenkins
# RUN install-plugins.sh docker-slaves github-branch-source
set -o pipefail
REF_DIR=${REF:-/usr/share/jenkins/ref/plugins}
FAILED="$REF_DIR/failed-plugins.txt"
. /usr/local/bin/jenkins-support
getLockFile() {
printf '%s' "$REF_DIR/${1}.lock"
}
getArchiveFilename() {
printf '%s' "$REF_DIR/${1}.jpi"
}
download() {
local plugin originalPlugin version lock ignoreLockFile
plugin="$1"
version="${2:-latest}"
ignoreLockFile="${3:-}"
lock="$(getLockFile "$plugin")"
if [[ $ignoreLockFile ]] || mkdir "$lock" &>/dev/null; then
if ! doDownload "$plugin" "$version"; then
# some plugin don't follow the rules about artifact ID
# typically: docker-plugin
originalPlugin="$plugin"
plugin="${plugin}-plugin"
if ! doDownload "$plugin" "$version"; then
echo "Failed to download plugin: $originalPlugin or $plugin" >&2
echo "Not downloaded: ${originalPlugin}" >> "$FAILED"
return 1
fi
fi
if ! checkIntegrity "$plugin"; then
echo "Downloaded file is not a valid ZIP: $(getArchiveFilename "$plugin")" >&2
echo "Download integrity: ${plugin}" >> "$FAILED"
return 1
fi
resolveDependencies "$plugin"
fi
}
doDownload() {
local plugin version url jpi
plugin="$1"
version="$2"
jpi="$(getArchiveFilename "$plugin")"
# If plugin already exists and is the same version do not download
if test -f "$jpi" && unzip -p "$jpi" META-INF/MANIFEST.MF | tr -d '\r' | grep "^Plugin-Version: ${version}$" > /dev/null; then
echo "Using provided plugin: $plugin"
return 0
fi
JENKINS_UC_DOWNLOAD=${JENKINS_UC_DOWNLOAD:-"$JENKINS_UC/download"}
url="$JENKINS_UC_DOWNLOAD/plugins/$plugin/$version/${plugin}.hpi"
echo "Downloading plugin: $plugin from $url"
curl --connect-timeout ${CURL_CONNECTION_TIMEOUT:-20} --retry ${CURL_RETRY:-5} --retry-delay ${CURL_RETRY_DELAY:-0} --retry-max-time ${CURL_RETRY_MAX_TIME:-60} -s -f -L "$url" -o "$jpi"
return $?
}
checkIntegrity() {
local plugin jpi
plugin="$1"
jpi="$(getArchiveFilename "$plugin")"
unzip -t -qq "$jpi" >/dev/null
return $?
}
resolveDependencies() {
local plugin jpi dependencies
plugin="$1"
jpi="$(getArchiveFilename "$plugin")"
dependencies="$(unzip -p "$jpi" META-INF/MANIFEST.MF | tr -d '\r' | tr '\n' '|' | sed -e 's#| ##g' | tr '|' '\n' | grep "^Plugin-Dependencies: " | sed -e 's#^Plugin-Dependencies: ##')"
if [[ ! $dependencies ]]; then
echo " > $plugin has no dependencies"
return
fi
echo " > $plugin depends on $dependencies"
IFS=',' read -r -a array <<< "$dependencies"
for d in "${array[@]}"
do
plugin="$(cut -d':' -f1 - <<< "$d")"
if [[ $d == *"resolution:=optional"* ]]; then
echo "Skipping optional dependency $plugin"
else
local pluginInstalled
if pluginInstalled="$(echo "${bundledPlugins}" | grep "^${plugin}:")"; then
pluginInstalled="${pluginInstalled//[$'\r']}"
local versionInstalled; versionInstalled=$(versionFromPlugin "${pluginInstalled}")
local minVersion; minVersion=$(versionFromPlugin "${d}")
if versionLT "${versionInstalled}" "${minVersion}"; then
echo "Upgrading bundled dependency $d ($minVersion > $versionInstalled)"
download "$plugin" &
else
echo "Skipping already bundled dependency $d ($minVersion <= $versionInstalled)"
fi
else
download "$plugin" &
fi
fi
done
wait
}
bundledPlugins() {
local JENKINS_WAR=/usr/share/jenkins/jenkins.war
if [ -f $JENKINS_WAR ]
then
TEMP_PLUGIN_DIR=/tmp/plugintemp.$$
for i in $(jar tf $JENKINS_WAR | egrep '[^detached-]plugins.*\..pi' | sort)
do
rm -fr $TEMP_PLUGIN_DIR
mkdir -p $TEMP_PLUGIN_DIR
PLUGIN=$(basename "$i"|cut -f1 -d'.')
(cd $TEMP_PLUGIN_DIR;jar xf "$JENKINS_WAR" "$i";jar xvf "$TEMP_PLUGIN_DIR/$i" META-INF/MANIFEST.MF >/dev/null 2>&1)
VER=$(egrep -i Plugin-Version "$TEMP_PLUGIN_DIR/META-INF/MANIFEST.MF"|cut -d: -f2|sed 's/ //')
echo "$PLUGIN:$VER"
done
rm -fr $TEMP_PLUGIN_DIR
else
rm -f "$TEMP_ALREADY_INSTALLED"
echo "ERROR file not found: $JENKINS_WAR"
exit 1
fi
}
versionFromPlugin() {
local plugin=$1
if [[ $plugin =~ .*:.* ]]; then
echo "${plugin##*:}"
else
echo "latest"
fi
}
installedPlugins() {
for f in "$REF_DIR"/*.jpi; do
echo "$(basename "$f" | sed -e 's/\.jpi//'):$(get_plugin_version "$f")"
done
}
main() {
local plugin version
mkdir -p "$REF_DIR" || exit 1
# Create lockfile manually before first run to make sure any explicit version set is used.
echo "Creating initial locks..."
for plugin in "$@"; do
mkdir "$(getLockFile "${plugin%%:*}")"
done
echo "Analyzing war..."
bundledPlugins="$(bundledPlugins)"
echo "Downloading plugins..."
for plugin in "$@"; do
version=""
if [[ $plugin =~ .*:.* ]]; then
version=$(versionFromPlugin "${plugin}")
plugin="${plugin%%:*}"
fi
download "$plugin" "$version" "true" &
done
wait
echo
echo "WAR bundled plugins:"
echo "${bundledPlugins}"
echo
echo "Installed plugins:"
installedPlugins
if [[ -f $FAILED ]]; then
echo "Some plugins failed to download!" "$(<"$FAILED")" >&2
exit 1
fi
echo "Cleaning up locks"
rm -r "$REF_DIR"/*.lock
}
main "$@"

127
jenkins/jenkins-support Normal file
View File

@ -0,0 +1,127 @@
#!/bin/bash -eu
# compare if version1 < version2
versionLT() {
local v1; v1=$(echo "$1" | cut -d '-' -f 1 )
local q1; q1=$(echo "$1" | cut -s -d '-' -f 2- )
local v2; v2=$(echo "$2" | cut -d '-' -f 1 )
local q2; q2=$(echo "$2" | cut -s -d '-' -f 2- )
if [ "$v1" = "$v2" ]; then
if [ "$q1" = "$q2" ]; then
return 1
else
if [ -z "$q1" ]; then
return 1
else
if [ -z "$q2" ]; then
return 0
else
[ "$q1" = "$(echo -e "$q1\n$q2" | sort -V | head -n1)" ]
fi
fi
fi
else
[ "$v1" = "$(echo -e "$v1\n$v2" | sort -V | head -n1)" ]
fi
}
# returns a plugin version from a plugin archive
get_plugin_version() {
local archive; archive=$1
local version; version=$(unzip -p "$archive" META-INF/MANIFEST.MF | grep "^Plugin-Version: " | sed -e 's#^Plugin-Version: ##')
version=${version%%[[:space:]]}
echo "$version"
}
# Copy files from /usr/share/jenkins/ref into $JENKINS_HOME
# So the initial JENKINS-HOME is set with expected content.
# Don't override, as this is just a reference setup, and use from UI
# can then change this, upgrade plugins, etc.
copy_reference_file() {
f="${1%/}"
b="${f%.override}"
rel="${b:23}"
version_marker="${rel}.version_from_image"
dir=$(dirname "${b}")
local action;
local reason;
local container_version;
local image_version;
local marker_version;
local log; log=false
if [[ ${rel} == plugins/*.jpi ]]; then
container_version=$(get_plugin_version "$JENKINS_HOME/${rel}")
image_version=$(get_plugin_version "${f}")
if [[ -e $JENKINS_HOME/${version_marker} ]]; then
marker_version=$(cat "$JENKINS_HOME/${version_marker}")
if versionLT "$marker_version" "$container_version"; then
action="SKIPPED"
reason="Installed version ($container_version) has been manually upgraded from initial version ($marker_version)"
log=true
else
if [[ "$image_version" == "$container_version" ]]; then
action="SKIPPED"
reason="Version from image is the same as the installed version $image_version"
else
if versionLT "$image_version" "$container_version"; then
action="SKIPPED"
log=true
reason="Image version ($image_version) is older than installed version ($container_version)"
else
action="UPGRADED"
log=true
reason="Image version ($image_version) is newer than installed version ($container_version)"
fi
fi
fi
else
if [[ -n "$TRY_UPGRADE_IF_NO_MARKER" ]]; then
if [[ "$image_version" == "$container_version" ]]; then
action="SKIPPED"
reason="Version from image is the same as the installed version $image_version (no marker found)"
# Add marker for next time
echo "$image_version" > "$JENKINS_HOME/${version_marker}"
else
if versionLT "$image_version" "$container_version"; then
action="SKIPPED"
log=true
reason="Image version ($image_version) is older than installed version ($container_version) (no marker found)"
else
action="UPGRADED"
log=true
reason="Image version ($image_version) is newer than installed version ($container_version) (no marker found)"
fi
fi
fi
fi
if [[ ! -e $JENKINS_HOME/${rel} || "$action" == "UPGRADED" || $f = *.override ]]; then
action=${action:-"INSTALLED"}
log=true
mkdir -p "$JENKINS_HOME/${dir:23}"
cp -r "${f}" "$JENKINS_HOME/${rel}";
# pin plugins on initial copy
touch "$JENKINS_HOME/${rel}.pinned"
echo "$image_version" > "$JENKINS_HOME/${version_marker}"
reason=${reason:-$image_version}
else
action=${action:-"SKIPPED"}
fi
else
if [[ ! -e $JENKINS_HOME/${rel} || $f = *.override ]]
then
action="INSTALLED"
log=true
mkdir -p "$JENKINS_HOME/${dir:23}"
cp -r "${f}" "$JENKINS_HOME/${rel}";
else
action="SKIPPED"
fi
fi
if [[ -n "$VERBOSE" || "$log" == "true" ]]; then
if [ -z "$reason" ]; then
echo "$action $rel" >> "$COPY_REFERENCE_FILE_LOG"
else
echo "$action $rel : $reason" >> "$COPY_REFERENCE_FILE_LOG"
fi
fi
}

26
jenkins/jenkins.sh Normal file
View File

@ -0,0 +1,26 @@
#! /bin/bash -e
: "${JENKINS_HOME:="/var/jenkins_home"}"
touch "${COPY_REFERENCE_FILE_LOG}" || { echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?"; exit 1; }
echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG"
find /usr/share/jenkins/ref/ -type f -exec bash -c '. /usr/local/bin/jenkins-support; for arg; do copy_reference_file "$arg"; done' _ {} +
# if `docker run` first argument start with `--` the user is passing jenkins launcher arguments
if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then
# read JAVA_OPTS and JENKINS_OPTS into arrays to avoid need for eval (and associated vulnerabilities)
java_opts_array=()
while IFS= read -r -d '' item; do
java_opts_array+=( "$item" )
done < <([[ $JAVA_OPTS ]] && xargs printf '%s\0' <<<"$JAVA_OPTS")
jenkins_opts_array=( )
while IFS= read -r -d '' item; do
jenkins_opts_array+=( "$item" )
done < <([[ $JENKINS_OPTS ]] && xargs printf '%s\0' <<<"$JENKINS_OPTS")
exec java "${java_opts_array[@]}" -jar /usr/share/jenkins/jenkins.war "${jenkins_opts_array[@]}" "$@"
fi
# As argument is not jenkins, assume user want to run his own process, for example a `bash` shell to explore this image
exec "$@"

28
jenkins/jenkins_home/.gitignore vendored Normal file
View File

@ -0,0 +1,28 @@
# File Patterns to Ignore
logs
*.log
*.log.*
*.swp
# Ignore SSH Config
.ssh/*
!.ssh/known_hosts
# Include job configs and ignore other data
!config.xml
builds
lastStable
lastSuccessful
nextBuildNumber
# Ignore expanded plugins folders because we only want jpi files
plugins/*
!plugins/*.jpi
# Include user info
!userContent/*
!users/*
# Ignore Directories
workspace/
war/

124
jenkins/plugins.sh Normal file
View File

@ -0,0 +1,124 @@
#! /bin/bash
# Parse a support-core plugin -style txt file as specification for jenkins plugins to be installed
# in the reference directory, so user can define a derived Docker image with just :
#
# FROM jenkins
# COPY plugins.txt /plugins.txt
# RUN /usr/local/bin/plugins.sh /plugins.txt
#
# Note: Plugins already installed are skipped
#
set -e
echo "WARN: plugins.sh is deprecated, please switch to install-plugins.sh"
if [ -z "$1" ]
then
echo "
USAGE:
Parse a support-core plugin -style txt file as specification for jenkins plugins to be installed
in the reference directory, so user can define a derived Docker image with just :
FROM jenkins
COPY plugins.txt /plugins.txt
RUN /usr/local/bin/plugins.sh /plugins.txt
Note: Plugins already installed are skipped
"
exit 1
else
JENKINS_INPUT_JOB_LIST=$1
if [ ! -f "$JENKINS_INPUT_JOB_LIST" ]
then
echo "ERROR File not found: $JENKINS_INPUT_JOB_LIST"
exit 1
fi
fi
# the war includes a # of plugins, to make the build efficient filter out
# the plugins so we dont install 2x - there about 17!
if [ -d "$JENKINS_HOME" ]
then
TEMP_ALREADY_INSTALLED=$JENKINS_HOME/preinstalled.plugins.$$.txt
else
echo "ERROR $JENKINS_HOME not found"
exit 1
fi
JENKINS_PLUGINS_DIR=/var/jenkins_home/plugins
if [ -d "$JENKINS_PLUGINS_DIR" ]
then
echo "Analyzing: $JENKINS_PLUGINS_DIR"
for i in "$JENKINS_PLUGINS_DIR"/*/; do
JENKINS_PLUGIN=$(basename "$i")
JENKINS_PLUGIN_VER=$(egrep -i Plugin-Version "$i/META-INF/MANIFEST.MF"|cut -d: -f2|sed 's/ //')
echo "$JENKINS_PLUGIN:$JENKINS_PLUGIN_VER"
done >"$TEMP_ALREADY_INSTALLED"
else
JENKINS_WAR=/usr/share/jenkins/jenkins.war
if [ -f "$JENKINS_WAR" ]
then
echo "Analyzing war: $JENKINS_WAR"
TEMP_PLUGIN_DIR=/tmp/plugintemp.$$
while read -r i <&3; do
rm -fr "$TEMP_PLUGIN_DIR"
mkdir -p "$TEMP_PLUGIN_DIR"
PLUGIN=$(basename "$i"|cut -f1 -d'.')
(cd "$TEMP_PLUGIN_DIR" || exit; jar xf "$JENKINS_WAR" "$i"; jar xvf "$TEMP_PLUGIN_DIR/$i" META-INF/MANIFEST.MF >/dev/null 2>&1)
VER=$(egrep -i Plugin-Version "$TEMP_PLUGIN_DIR/META-INF/MANIFEST.MF"|cut -d: -f2|sed 's/ //')
echo "$PLUGIN:$VER"
done 3< <(jar tf "$JENKINS_WAR" | egrep '[^detached-]plugins.*\..pi' | sort) > "$TEMP_ALREADY_INSTALLED"
rm -fr "$TEMP_PLUGIN_DIR"
else
rm -f "$TEMP_ALREADY_INSTALLED"
echo "ERROR file not found: $JENKINS_WAR"
exit 1
fi
fi
REF=/usr/share/jenkins/ref/plugins
mkdir -p $REF
COUNT_PLUGINS_INSTALLED=0
while read -r spec || [ -n "$spec" ]; do
plugin=(${spec//:/ });
[[ ${plugin[0]} =~ ^# ]] && continue
[[ ${plugin[0]} =~ ^[[:space:]]*$ ]] && continue
[[ -z ${plugin[1]} ]] && plugin[1]="latest"
if [ -z "$JENKINS_UC_DOWNLOAD" ]; then
JENKINS_UC_DOWNLOAD=$JENKINS_UC/download
fi
if ! grep -q "${plugin[0]}:${plugin[1]}" "$TEMP_ALREADY_INSTALLED"
then
echo "Downloading ${plugin[0]}:${plugin[1]}"
curl --retry 3 --retry-delay 5 -sSL -f "${JENKINS_UC_DOWNLOAD}/plugins/${plugin[0]}/${plugin[1]}/${plugin[0]}.hpi" -o "$REF/${plugin[0]}.jpi"
unzip -qqt "$REF/${plugin[0]}.jpi"
(( COUNT_PLUGINS_INSTALLED += 1 ))
else
echo " ... skipping already installed: ${plugin[0]}:${plugin[1]}"
fi
done < "$JENKINS_INPUT_JOB_LIST"
echo "---------------------------------------------------"
if (( "$COUNT_PLUGINS_INSTALLED" > 0 ))
then
echo "INFO: Successfully installed $COUNT_PLUGINS_INSTALLED plugins."
if [ -d $JENKINS_PLUGINS_DIR ]
then
echo "INFO: Please restart the container for changes to take effect!"
fi
else
echo "INFO: No changes, all plugins previously installed."
fi
echo "---------------------------------------------------"
#cleanup
rm "$TEMP_ALREADY_INSTALLED"
exit 0

148
jenkins/publish.sh Normal file
View File

@ -0,0 +1,148 @@
#!/bin/bash -eu
# Publish any versions of the docker image not yet pushed to jenkinsci/jenkins
# Arguments:
# -n dry run, do not build or publish images
set -o pipefail
sort-versions() {
if [ "$(uname)" == 'Darwin' ]; then
gsort --version-sort
else
sort --version-sort
fi
}
# Try tagging with and without -f to support all versions of docker
docker-tag() {
local from="jenkinsci/jenkins:$1"
local to="jenkinsci/jenkins:$2"
local out
if out=$(docker tag -f "$from" "$to" 2>&1); then
echo "$out"
else
docker tag "$from" "$to"
fi
}
get-variant() {
local branch
branch=$(git show-ref | grep $(git rev-list -n 1 HEAD) | tail -1 | rev | cut -d/ -f 1 | rev)
if [ -z "$branch" ]; then
>&2 echo "Could not get the current branch name for commit, not in a branch?: $(git rev-list -n 1 HEAD)"
return 1
fi
case "$branch" in
master) echo "" ;;
*) echo "-${branch}" ;;
esac
}
login-token() {
# could use jq .token
curl -q -sSL https://auth.docker.io/token\?service\=registry.docker.io\&scope\=repository:jenkinsci/jenkins:pull | grep -o '"token":"[^"]*"' | cut -d':' -f 2 | xargs echo
}
is-published() {
get-manifest "$1" &> /dev/null
}
get-manifest() {
local tag=$1
curl -q -fsSL -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: Bearer $TOKEN" "https://index.docker.io/v2/jenkinsci/jenkins/manifests/$tag"
}
get-digest() {
#get-manifest "$1" | jq .config.digest
get-manifest "$1" | grep -A 10 -o '"config".*' | grep digest | head -1 | cut -d':' -f 2,3 | xargs echo
}
get-latest-versions() {
curl -q -fsSL https://api.github.com/repos/jenkinsci/jenkins/tags?per_page=20 | grep '"name": "jenkins-' | egrep -o '[0-9]+(\.[0-9]+)+' | sort-versions | uniq
}
publish() {
local version=$1
local variant=$2
local tag="${version}${variant}"
local sha
local build_opts="--no-cache --pull"
sha=$(curl -q -fsSL "http://repo.jenkins-ci.org/simple/releases/org/jenkins-ci/main/jenkins-war/${version}/jenkins-war-${version}.war.sha1")
docker build --build-arg "JENKINS_VERSION=$version" \
--build-arg "JENKINS_SHA=$sha" \
--tag "jenkinsci/jenkins:${tag}" ${build_opts} .
docker push "jenkinsci/jenkins:${tag}"
}
tag-and-push() {
local source=$1
local target=$2
local digest_source; digest_source=$(get-digest ${tag1})
local digest_target; digest_target=$(get-digest ${tag2})
if [ "$digest_source" == "$digest_target" ]; then
echo "Images ${source} [$digest_source] and ${target} [$digest_target] are already the same, not updating tags"
else
echo "Creating tag ${target} pointing to ${source}"
if [ ! "$dry_run" = true ]; then
docker-tag "jenkinsci/jenkins:${source}" "jenkinsci/jenkins:${target}"
docker push "jenkinsci/jenkins:${source}"
fi
fi
}
publish-latest() {
local version=$1
local variant=$2
# push latest (for master) or the name of the branch (for other branches)
if [ -z "${variant}" ]; then
tag-and-push "${version}${variant}" "latest"
else
tag-and-push "${version}${variant}" "${variant#-}"
fi
}
publish-lts() {
local version=$1
local variant=$2
tag-and-push "${version}" "lts${variant}"
}
dry_run=false
if [ "-n" == "${1:-}" ]; then
dry_run=true
fi
if [ "$dry_run" = true ]; then
echo "Dry run, will not build or publish images"
fi
TOKEN=$(login-token)
variant=$(get-variant)
lts_version=""
version=""
for version in $(get-latest-versions); do
if is-published "$version$variant"; then
echo "Tag is already published: $version$variant"
else
echo "Publishing version: $version$variant"
if [ ! "$dry_run" = true ]; then
publish "$version" "$variant"
fi
fi
# Update lts tag
if [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
lts_version="${version}"
fi
done
publish-latest "${version}" "${variant}"
if [ -n "${lts_version}" ]; then
publish-lts "${lts_version}" "${variant}"
fi

View File

@ -0,0 +1,31 @@
#!/usr/bin/env bats
SUT_IMAGE=bats-jenkins
load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'
load test_helpers
. $BATS_TEST_DIRNAME/../jenkins-support
@test "build image" {
cd $BATS_TEST_DIRNAME/..
docker_build -t $SUT_IMAGE .
}
@test "versionLT" {
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0 1.0"
assert_failure
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0 1.1"
assert_success
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.1 1.0"
assert_failure
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0-beta-1 1.0"
assert_success
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0 1.0-beta-1"
assert_failure
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0-alpha-1 1.0-beta-1"
assert_success
run docker run --rm $SUT_IMAGE bash -c "source /usr/local/bin/jenkins-support && versionLT 1.0-beta-1 1.0-alpha-1"
assert_failure
}

View File

@ -0,0 +1,118 @@
#!/usr/bin/env bats
SUT_IMAGE=bats-jenkins
load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'
load test_helpers
@test "build image" {
cd $BATS_TEST_DIRNAME/..
docker_build -t $SUT_IMAGE .
}
@test "plugins are installed with plugins.sh" {
run docker build -t $SUT_IMAGE-plugins $BATS_TEST_DIRNAME/plugins
assert_success
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'maven-plugin.jpi'
assert_line 'maven-plugin.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh" {
run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
refute_line --partial 'Skipping already bundled dependency'
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
assert_success
assert_line 'maven-plugin.jpi'
assert_line 'maven-plugin.jpi.pinned'
assert_line 'ant.jpi'
assert_line 'ant.jpi.pinned'
assert_line 'credentials.jpi'
assert_line 'credentials.jpi.pinned'
assert_line 'mesos.jpi'
assert_line 'mesos.jpi.pinned'
# optional dependencies
refute_line 'metrics.jpi'
refute_line 'metrics.jpi.pinned'
# plugins bundled but under detached-plugins, so need to be installed
assert_line 'javadoc.jpi'
assert_line 'javadoc.jpi.pinned'
assert_line 'mailer.jpi'
assert_line 'mailer.jpi.pinned'
}
@test "plugins are installed with install-plugins.sh even when already exist" {
run docker build -t $SUT_IMAGE-install-plugins-update --no-cache $BATS_TEST_DIRNAME/install-plugins/update
assert_success
assert_line "Using provided plugin: ant"
refute_line --partial 'Skipping already bundled dependency'
# replace DOS line endings \r\n
run bash -c "docker run --rm $SUT_IMAGE-install-plugins-update unzip -p /var/jenkins_home/plugins/maven-plugin.jpi META-INF/MANIFEST.MF | tr -d '\r'"
assert_success
assert_line 'Plugin-Version: 2.13'
}
@test "plugins are getting upgraded but not downgraded" {
# Initial execution
run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work"
mkdir -p $work
# Image contains maven-plugin 2.7.1 and ant-plugin 1.3
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins true"
assert_success
run unzip_manifest maven-plugin.jpi $work
assert_line 'Plugin-Version: 2.7.1'
run unzip_manifest ant.jpi $work
assert_line 'Plugin-Version: 1.3'
# Upgrade to new image with different plugins
run docker build -t $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
assert_success
# Images contains maven-plugin 2.13 and ant-plugin 1.2
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
assert_success
run unzip_manifest maven-plugin.jpi $work
assert_success
# Should be updated
assert_line 'Plugin-Version: 2.13'
run unzip_manifest ant.jpi $work
# 1.2 is older than the existing 1.3, so keep 1.3
assert_line 'Plugin-Version: 1.3'
}
@test "clean work directory" {
run bash -c "rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work"
}
@test "do not upgrade if plugin has been manually updated" {
run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
assert_success
local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work"
mkdir -p $work
# Image contains maven-plugin 2.7.1 and ant-plugin 1.3
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins curl --connect-timeout 20 --retry 5 --retry-delay 0 --retry-max-time 60 -s -f -L https://updates.jenkins.io/download/plugins/maven-plugin/2.12.1/maven-plugin.hpi -o /var/jenkins_home/plugins/maven-plugin.jpi"
assert_success
run unzip_manifest maven-plugin.jpi $work
assert_line 'Plugin-Version: 2.12.1'
run docker build -t $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
assert_success
# Images contains maven-plugin 2.13 and ant-plugin 1.2
run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
assert_success
run unzip_manifest maven-plugin.jpi $work
assert_success
# Shouldn't be updated
refute_line 'Plugin-Version: 2.13'
}
@test "clean work directory" {
run bash -c "rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work"
}

View File

@ -0,0 +1,3 @@
FROM bats-jenkins
RUN /usr/local/bin/install-plugins.sh maven-plugin:2.7.1 ant:1.3 mesos:0.13.0

View File

@ -0,0 +1,3 @@
FROM bats-jenkins-install-plugins
RUN /usr/local/bin/install-plugins.sh maven-plugin:2.13 ant:1.3

View File

@ -0,0 +1,4 @@
FROM bats-jenkins
COPY plugins.txt /usr/share/jenkins/ref/
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/ref/plugins.txt

View File

@ -0,0 +1,2 @@
maven-plugin:2.7.1
ant:1.3

View File

@ -0,0 +1,56 @@
#!/usr/bin/env bats
SUT_IMAGE=bats-jenkins
SUT_CONTAINER=bats-jenkins
load 'test_helper/bats-support/load'
load 'test_helper/bats-assert/load'
load test_helpers
@test "build image" {
cd $BATS_TEST_DIRNAME/..
docker_build -t $SUT_IMAGE .
}
@test "clean test containers" {
cleanup $SUT_CONTAINER
}
@test "test multiple JENKINS_OPTS" {
# running --help --version should return the version, not the help
local version=$(grep 'ENV JENKINS_VERSION' Dockerfile | sed -e 's/.*:-\(.*\)}/\1/')
# need the last line of output
assert "${version}" docker run --rm -e JENKINS_OPTS="--help --version" --name $SUT_CONTAINER -P $SUT_IMAGE | tail -n 1
}
@test "test jenkins arguments" {
# running --help --version should return the version, not the help
local version=$(grep 'ENV JENKINS_VERSION' Dockerfile | sed -e 's/.*:-\(.*\)}/\1/')
# need the last line of output
assert "${version}" docker run --rm --name $SUT_CONTAINER -P $SUT_IMAGE --help --version | tail -n 1
}
@test "create test container" {
docker run -d -e JAVA_OPTS="-Duser.timezone=Europe/Madrid -Dhudson.model.DirectoryBrowserSupport.CSP=\"default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';\"" --name $SUT_CONTAINER -P $SUT_IMAGE
}
@test "test container is running" {
sleep 1 # give time to eventually fail to initialize
retry 3 1 assert "true" docker inspect -f {{.State.Running}} $SUT_CONTAINER
}
@test "Jenkins is initialized" {
retry 30 5 test_url /api/json
}
@test "JAVA_OPTS are set" {
local sed_expr='s/<wbr>//g;s/<td class="pane">.*<\/td><td class.*normal">//g;s/<t.>//g;s/<\/t.>//g'
assert 'default-src &#039;self&#039;; script-src &#039;self&#039; &#039;unsafe-inline&#039; &#039;unsafe-eval&#039;; style-src &#039;self&#039; &#039;unsafe-inline&#039;;' \
bash -c "curl -fsSL --user \"admin:$(get_jenkins_password)\" $(get_jenkins_url)/systemInfo | sed 's/<\/tr>/<\/tr>\'$'\n/g' | grep '<td class=\"pane\">hudson.model.DirectoryBrowserSupport.CSP</td>' | sed -e '${sed_expr}'"
assert 'Europe/Madrid' \
bash -c "curl -fsSL --user \"admin:$(get_jenkins_password)\" $(get_jenkins_url)/systemInfo | sed 's/<\/tr>/<\/tr>\'$'\n/g' | grep '<td class=\"pane\">user.timezone</td>' | sed -e '${sed_expr}'"
}
@test "clean test containers" {
cleanup $SUT_CONTAINER
}

View File

@ -0,0 +1,84 @@
#!/bin/bash
# check dependencies
(
type docker &>/dev/null || ( echo "docker is not available"; exit 1 )
type curl &>/dev/null || ( echo "curl is not available"; exit 1 )
)>&2
# Assert that $1 is the outputof a command $2
function assert {
local expected_output=$1
shift
local actual_output
actual_output=$("$@")
actual_output="${actual_output//[$'\t\r\n']}" # remove newlines
if ! [ "$actual_output" = "$expected_output" ]; then
echo "expected: \"$expected_output\""
echo "actual: \"$actual_output\""
false
fi
}
# Retry a command $1 times until it succeeds. Wait $2 seconds between retries.
function retry {
local attempts=$1
shift
local delay=$1
shift
local i
for ((i=0; i < attempts; i++)); do
run "$@"
if [ "$status" -eq 0 ]; then
return 0
fi
sleep $delay
done
echo "Command \"$*\" failed $attempts times. Status: $status. Output: $output" >&2
false
}
function docker_build {
if [ -n "$JENKINS_VERSION" ]; then
docker build --build-arg JENKINS_VERSION=$JENKINS_VERSION --build-arg JENKINS_SHA=$JENKINS_SHA "$@"
else
docker build "$@"
fi
}
function get_jenkins_url {
if [ -z "${DOCKER_HOST}" ]; then
DOCKER_IP=localhost
else
DOCKER_IP=$(echo "$DOCKER_HOST" | sed -e 's|tcp://\(.*\):[0-9]*|\1|')
fi
echo "http://$DOCKER_IP:$(docker port "$SUT_CONTAINER" 8080 | cut -d: -f2)"
}
function get_jenkins_password {
docker logs "$SUT_CONTAINER" 2>&1 | grep -A 2 "Please use the following password to proceed to installation" | tail -n 1
}
function test_url {
run curl --user "admin:$(get_jenkins_password)" --output /dev/null --silent --head --fail --connect-timeout 30 --max-time 60 "$(get_jenkins_url)$1"
if [ "$status" -eq 0 ]; then
true
else
echo "URL $(get_jenkins_url)$1 failed" >&2
echo "output: $output" >&2
false
fi
}
function cleanup {
docker kill "$1" &>/dev/null ||:
docker rm -fv "$1" &>/dev/null ||:
}
function unzip_manifest {
local plugin=$1
local work=$2
bash -c "docker run --rm -v $work:/var/jenkins_home --entrypoint unzip $SUT_IMAGE -p /var/jenkins_home/plugins/$plugin META-INF/MANIFEST.MF | tr -d '\r'"
}

View File

@ -0,0 +1,3 @@
FROM bats-jenkins
RUN /usr/local/bin/install-plugins.sh maven-plugin:2.13 ant:1.2

View File

@ -0,0 +1,36 @@
#!/bin/bash -eu
# Generate the Docker official-images file
sha() {
local branch=$1
git rev-parse $branch
}
version_from_dockerfile() {
local branch=$1
git show $branch:Dockerfile | grep JENKINS_VERSION: | sed -e 's/.*:-\(.*\)}/\1/'
}
master_sha=$(sha master)
alpine_sha=$(sha alpine)
master_version=$(version_from_dockerfile master)
alpine_version=$(version_from_dockerfile alpine)
if ! [ "$master_version" == "$alpine_version" ]; then
echo "Master version '$master_version' does not match alpine version '$alpine_version'"
exit 1
fi
cat << EOF > ../official-images/library/jenkins
# maintainer: Nicolas De Loof <nicolas.deloof@gmail.com> (@ndeloof)
# maintainer: Michael Neale <mneale@cloudbees.com> (@michaelneale)
# maintainer: Carlos Sanchez <csanchez@cloudbees.com> (@carlossg)
latest: git://github.com/jenkinsci/jenkins-ci.org-docker@$master_sha
$master_version: git://github.com/jenkinsci/jenkins-ci.org-docker@$master_sha
alpine: git://github.com/jenkinsci/jenkins-ci.org-docker@$alpine_sha
$alpine_version-alpine: git://github.com/jenkinsci/jenkins-ci.org-docker@$alpine_sha
EOF

0
logs/apache2/.gitkeep Normal file
View File

0
logs/nginx/.gitkeep Normal file
View File

View File

@ -2,26 +2,10 @@ FROM mysql:5.7
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
ADD startup /etc/mysql/startup
RUN chown -R mysql:root /var/lib/mysql/
ARG MYSQL_DATABASE=default
ARG MYSQL_USER=default
ARG MYSQL_PASSWORD=secret
ARG MYSQL_ROOT_PASSWORD=root
ENV MYSQL_DATABASE=$MYSQL_DATABASE
ENV MYSQL_USER=$MYSQL_USER
ENV MYSQL_PASSWORD=$MYSQL_PASSWORD
ENV MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
RUN sed -i 's/MYSQL_DATABASE/'$MYSQL_DATABASE'/g' /etc/mysql/startup && \
sed -i 's/MYSQL_USER/'$MYSQL_USER'/g' /etc/mysql/startup && \
sed -i 's/MYSQL_PASSWORD/'$MYSQL_PASSWORD'/g' /etc/mysql/startup
ADD my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld", "--init-file=/etc/mysql/startup"]
CMD ["mysqld"]
EXPOSE 3306

View File

@ -1,4 +0,0 @@
DROP USER IF EXISTS 'MYSQL_USER';
CREATE USER 'MYSQL_USER'@'%' IDENTIFIED BY 'MYSQL_PASSWORD';
CREATE DATABASE IF NOT EXISTS `MYSQL_DATABASE`;
GRANT ALL ON `MYSQL_DATABASE`.* TO 'MYSQL_USER'@'%';

View File

@ -10,7 +10,7 @@
# https://hub.docker.com/r/laradock/php-fpm/tags/
#
FROM laradock/php-fpm:5.6--1.2
FROM laradock/php-fpm:5.6--1.4
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
@ -44,7 +44,7 @@ ARG INSTALL_SOAP=false
RUN if [ ${INSTALL_SOAP} = true ]; then \
# Install the soap extension
apt-get -y update && \
apt-get -y install libxml2-dev php-soap && \
apt-get -y install libxml2-dev php-soap && \
docker-php-ext-install soap \
;fi
@ -65,6 +65,18 @@ RUN if [ ${INSTALL_XDEBUG} = true ]; then \
# Copy xdebug configration for remote debugging
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
#####################################
# PHP REDIS EXTENSION FOR PHP 5
#####################################
ARG INSTALL_PHPREDIS=false
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
# Install Php Redis Extension
pecl install -o -f redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis \
;fi
#####################################
# MongoDB:
#####################################
@ -83,8 +95,7 @@ RUN if [ ${INSTALL_MONGO} = true ]; then \
ARG INSTALL_ZIP_ARCHIVE=false
RUN if [ ${INSTALL_ZIP_ARCHIVE} = true ]; then \
# Install the zip extension
pecl install zip && \
docker-php-ext-enable zip \
docker-php-ext-install zip \
;fi
#####################################
@ -109,17 +120,13 @@ RUN if [ ${INSTALL_MEMCACHED} = true ]; then \
;fi
#####################################
# PHP MySQL:
# Exif:
#####################################
ARG INSTALL_MYSQL=false
COPY ./mysql.ini /usr/local/etc/php/conf.d/mysql.ini
RUN if [ ${INSTALL_MYSQL} = true ]; then \
# Install the php mysql extension
docker-php-ext-install mysql && \
docker-php-ext-install mysqli && \
docker-php-ext-enable mysql && \
docker-php-ext-enable mysqli \
ARG INSTALL_EXIF=false
RUN if [ ${INSTALL_EXIF} = true ]; then \
# Enable Exif PHP extentions requirements
docker-php-ext-install exif \
;fi
#####################################
@ -151,8 +158,7 @@ RUN if [ ${INSTALL_AEROSPIKE_EXTENSION} = true ]; then \
ARG INSTALL_OPCACHE=false
RUN if [ ${INSTALL_OPCACHE} = true ]; then \
docker-php-ext-install opcache && \
docker-php-ext-enable opcache \
docker-php-ext-install opcache \
;fi
# Copy opcache configration
@ -163,8 +169,11 @@ COPY ./opcache.ini /usr/local/etc/php/conf.d/opcache.ini
#####################################
ARG INSTALL_MYSQLI=false
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysqli \
# MySQL extenstion is available for Php5.6 and lower only
COPY ./mysql.ini /usr/local/etc/php/conf.d/mysql.ini
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysql && \
docker-php-ext-install mysqli \
;fi
#####################################
@ -173,7 +182,30 @@ RUN if [ ${INSTALL_MYSQLI} = true ]; then \
ARG INSTALL_TOKENIZER=false
RUN if [ ${INSTALL_TOKENIZER} = true ]; then \
docker-php-ext-install tokenizer \
docker-php-ext-install tokenizer \
;fi
#####################################
# Human Language and Character Encoding Support:
#####################################
ARG INSTALL_INTL=false
RUN if [ ${INSTALL_INTL} = true ]; then \
# Install intl and requirements
apt-get install -y zlib1g-dev libicu-dev g++ && \
docker-php-ext-configure intl && \
docker-php-ext-install intl \
;fi
#####################################
# GHOSTSCRIPT:
#####################################
ARG INSTALL_GHOSTSCRIPT=false
RUN if [ ${INSTALL_GHOSTSCRIPT} = true ]; then \
# Install the ghostscript extension for PDF editing
apt-get update && \
apt-get install -y poppler-utils ghostscript \
;fi
#
@ -185,7 +217,7 @@ RUN if [ ${INSTALL_TOKENIZER} = true ]; then \
ADD ./laravel.ini /usr/local/etc/php/conf.d
ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/
RUN rm -r /var/lib/apt/lists/*
#RUN rm -r /var/lib/apt/lists/*
RUN usermod -u 1000 www-data

View File

@ -10,7 +10,7 @@
# https://hub.docker.com/r/laradock/php-fpm/tags/
#
FROM laradock/php-fpm:7.0--1.2
FROM laradock/php-fpm:7.0--1.4
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
@ -34,7 +34,6 @@ MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
# in the `docker-compose.yml` before the build.
# Example:
# - INSTALL_ZIP_ARCHIVE=true
# - ...
#
#####################################
@ -60,9 +59,13 @@ RUN if [ ${INSTALL_XDEBUG} = true ]; then \
docker-php-ext-enable xdebug \
;fi
# Copy xdebug configration for remote debugging
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
#####################################
# PHP REDIS EXTENSION FOR PHP 7.0
# PHP REDIS EXTENSION FOR PHP 7
#####################################
ARG INSTALL_PHPREDIS=false
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
# Install Php Redis Extension
@ -71,9 +74,6 @@ RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
&& docker-php-ext-enable redis \
;fi
# Copy xdebug configration for remote debugging
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
#####################################
# MongoDB:
#####################################
@ -92,8 +92,7 @@ RUN if [ ${INSTALL_MONGO} = true ]; then \
ARG INSTALL_ZIP_ARCHIVE=false
RUN if [ ${INSTALL_ZIP_ARCHIVE} = true ]; then \
# Install the zip extension
pecl install zip && \
docker-php-ext-enable zip \
docker-php-ext-install zip \
;fi
#####################################
@ -135,11 +134,9 @@ RUN if [ ${INSTALL_MEMCACHED} = true ]; then \
ARG INSTALL_EXIF=false
RUN if [ ${INSTALL_EXIF} = true ]; then \
# Enable Exif PHP extentions requirements
docker-php-ext-install exif && \
docker-php-ext-enable exif \
docker-php-ext-install exif \
;fi
#####################################
# PHP Aerospike:
#####################################
@ -166,10 +163,10 @@ RUN if [ ${INSTALL_AEROSPIKE_EXTENSION} = true ]; then \
#####################################
# Opcache:
#####################################
ARG INSTALL_OPCACHE=false
RUN if [ ${INSTALL_OPCACHE} = true ]; then \
docker-php-ext-install opcache && \
docker-php-ext-enable opcache \
docker-php-ext-install opcache \
;fi
# Copy opcache configration
@ -178,9 +175,10 @@ COPY ./opcache.ini /usr/local/etc/php/conf.d/opcache.ini
#####################################
# Mysqli Modifications:
#####################################
ARG INSTALL_MYSQLI=false
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysqli \
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysqli \
;fi
#####################################
@ -189,12 +187,13 @@ RUN if [ ${INSTALL_MYSQLI} = true ]; then \
ARG INSTALL_TOKENIZER=false
RUN if [ ${INSTALL_TOKENIZER} = true ]; then \
docker-php-ext-install tokenizer \
docker-php-ext-install tokenizer \
;fi
#####################################
# SQL SERVER:
#####################################
ARG MSSQL=false
RUN if [ ${MSSQL} = true ]; then \
@ -243,8 +242,16 @@ RUN if [ ${MSSQL} = true ]; then \
&& ldd lib64/libmsodbcsql-13.0.so.0.0 \
&& ./install.sh install --accept-license \
&& ls -l /opt/microsoft/msodbcsql/ \
&& odbcinst -q -d -n "ODBC Driver 13 for SQL Server" && \
&& odbcinst -q -d -n "ODBC Driver 13 for SQL Server" \
#####################################
# Install pdo_dblib
#####################################
&& docker-php-ext-install pdo \
&& docker-php-ext-configure pdo_dblib --with-libdir=/lib/x86_64-linux-gnu \
&& docker-php-ext-install pdo_dblib \
&& docker-php-ext-enable pdo_dblib && \
#####################################
# Install sqlsrv y pdo_sqlsrv
@ -263,8 +270,6 @@ RUN if [ ${MSSQL} = true ]; then \
&& locale-gen \
;fi
#####################################
# Human Language and Character Encoding Support:
#####################################
@ -281,8 +286,8 @@ RUN if [ ${INSTALL_INTL} = true ]; then \
# GHOSTSCRIPT:
#####################################
ARG GHOSTSCRIPT=false
RUN if [ ${GHOSTSCRIPT} = true ]; then \
ARG INSTALL_GHOSTSCRIPT=false
RUN if [ ${INSTALL_GHOSTSCRIPT} = true ]; then \
# Install the ghostscript extension
# for PDF editing
apt-get -y update \
@ -291,7 +296,6 @@ RUN if [ ${GHOSTSCRIPT} = true ]; then \
ghostscript \
;fi
#
#--------------------------------------------------------------------------
# Final Touch
@ -301,7 +305,7 @@ RUN if [ ${GHOSTSCRIPT} = true ]; then \
ADD ./laravel.ini /usr/local/etc/php/conf.d
ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/
RUN rm -r /var/lib/apt/lists/*
#RUN rm -r /var/lib/apt/lists/*
RUN usermod -u 1000 www-data

View File

@ -10,7 +10,7 @@
# https://hub.docker.com/r/laradock/php-fpm/tags/
#
FROM laradock/php-fpm:7.1--1.3
FROM laradock/php-fpm:7.1--1.4
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
@ -34,9 +34,20 @@ MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
# in the `docker-compose.yml` before the build.
# Example:
# - INSTALL_ZIP_ARCHIVE=true
# - ...
#
#####################################
# SOAP:
#####################################
ARG INSTALL_SOAP=false
RUN if [ ${INSTALL_SOAP} = true ]; then \
# Install the soap extension
apt-get -y update && \
apt-get -y install libxml2-dev php-soap && \
docker-php-ext-install soap \
;fi
#####################################
# xDebug:
#####################################
@ -51,6 +62,18 @@ RUN if [ ${INSTALL_XDEBUG} = true ]; then \
# Copy xdebug configration for remote debugging
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
#####################################
# PHP REDIS EXTENSION FOR PHP 7
#####################################
ARG INSTALL_PHPREDIS=false
RUN if [ ${INSTALL_PHPREDIS} = true ]; then \
# Install Php Redis Extension
pecl install -o -f redis \
&& rm -rf /tmp/pear \
&& docker-php-ext-enable redis \
;fi
#####################################
# MongoDB:
#####################################
@ -69,8 +92,17 @@ RUN if [ ${INSTALL_MONGO} = true ]; then \
ARG INSTALL_ZIP_ARCHIVE=false
RUN if [ ${INSTALL_ZIP_ARCHIVE} = true ]; then \
# Install the zip extension
pecl install zip && \
docker-php-ext-enable zip \
docker-php-ext-install zip \
;fi
#####################################
# bcmath:
#####################################
ARG INSTALL_BCMATH=false
RUN if [ ${INSTALL_BCMATH} = true ]; then \
# Install the bcmath extension
docker-php-ext-install bcmath \
;fi
#####################################
@ -95,6 +127,16 @@ RUN if [ ${INSTALL_MEMCACHED} = true ]; then \
&& docker-php-ext-enable memcached \
;fi
#####################################
# Exif:
#####################################
ARG INSTALL_EXIF=false
RUN if [ ${INSTALL_EXIF} = true ]; then \
# Enable Exif PHP extentions requirements
docker-php-ext-install exif \
;fi
#####################################
# PHP Aerospike:
#####################################
@ -115,15 +157,16 @@ RUN if [ ${INSTALL_AEROSPIKE_EXTENSION} = true ]; then \
&& make install \
) \
&& rm /tmp/aerospike-client-php.tar.gz \
&& docker-php-ext-enable aerospike \
;fi
#####################################
# Opcache:
#####################################
ARG INSTALL_OPCACHE=false
RUN if [ ${INSTALL_OPCACHE} = true ]; then \
docker-php-ext-install opcache && \
docker-php-ext-enable opcache \
docker-php-ext-install opcache \
;fi
# Copy opcache configration
@ -132,9 +175,10 @@ COPY ./opcache.ini /usr/local/etc/php/conf.d/opcache.ini
#####################################
# Mysqli Modifications:
#####################################
ARG INSTALL_MYSQLI=false
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysqli \
RUN if [ ${INSTALL_MYSQLI} = true ]; then \
docker-php-ext-install mysqli \
;fi
#####################################
@ -150,8 +194,8 @@ RUN if [ ${INSTALL_TOKENIZER} = true ]; then \
# Human Language and Character Encoding Support:
#####################################
ARG INTL=false
RUN if [ ${INTL} = true ]; then \
ARG INSTALL_INTL=false
RUN if [ ${INSTALL_INTL} = true ]; then \
# Install intl and requirements
apt-get install -y zlib1g-dev libicu-dev g++ && \
docker-php-ext-configure intl && \
@ -162,8 +206,8 @@ RUN if [ ${INTL} = true ]; then \
# GHOSTSCRIPT:
#####################################
ARG GHOSTSCRIPT=false
RUN if [ ${GHOSTSCRIPT} = true ]; then \
ARG INSTALL_GHOSTSCRIPT=false
RUN if [ ${INSTALL_GHOSTSCRIPT} = true ]; then \
# Install the ghostscript extension
# for PDF editing
apt-get -y update \
@ -181,7 +225,7 @@ RUN if [ ${GHOSTSCRIPT} = true ]; then \
ADD ./laravel.ini /usr/local/etc/php/conf.d
ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/
RUN rm -r /var/lib/apt/lists/*
#RUN rm -r /var/lib/apt/lists/*
RUN usermod -u 1000 www-data

View File

@ -60,8 +60,7 @@ RUN if [ ${INSTALL_SOAP} = true ]; then \
# Install the PHP SOAP extension
apt-get -y update && \
add-apt-repository -y ppa:ondrej/php && \
apt-get -y install libxml2-dev php7.0-soap && \
echo "extension=soap.so" >> /etc/php/7.0/cli/conf.d/40-soap.ini \
apt-get -y install libxml2-dev php7.0-soap \
;fi
#####################################
@ -388,6 +387,28 @@ RUN if [ ${INSTALL_MC} = true ]; then\
chmod +x /usr/local/bin/mc \
;fi
#####################################
# Symfony:
#####################################
USER root
ARG INSTALL_SYMFONY=false
ENV INSTALL_SYMFONY ${INSTALL_SYMFONY}
RUN if [ ${INSTALL_SYMFONY} = true ]; then \
mkdir -p /usr/local/bin \
&& curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony \
&& chmod a+x /usr/local/bin/symfony \
# Symfony 3 alias
&& echo 'alias dev="php bin/console -e=dev"' >> ~/.bashrc \
&& echo 'alias prod="php bin/console -e=prod"' >> ~/.bashrc \
# Symfony 2 alias
# && echo 'alias dev="php app/console -e=dev"' >> ~/.bashrc \
# && echo 'alias prod="php app/console -e=prod"' >> ~/.bashrc \
;fi
USER laradock
#

View File

@ -10,7 +10,8 @@
# https://hub.docker.com/r/laradock/workspace/tags/
#
FROM laradock/workspace:1.3 # placeholder. Need change after new image would be built.
# placeholder. Need change after new image would be built.
FROM laradock/workspace:1.3
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>