Misconception: If I learn Docker then I don't have to learn the other systems stuff!
docker run \
-v "/mysql/etc:/etc/mysql" \
-v "/mysql/lib:/var/lib/mysql" \
-p "3306:3306" \
jamiemccrindle/mariadb --wsrep-new-cluster
if [ ! -f /var/lib/mysql/ibdata1 ]; then
mysql_install_db
/usr/bin/mysqld_safe $@ &
sleep 2
while : ; do
echo 'select 1' | mysql
if [ $? -eq 0 ] ; then
break
fi
sleep 1
done
cat /etc/mysql/init.sql | mysql
/usr/bin/mysqladmin shutdown
fi
/usr/bin/mysqld_safe $@
Misconception: If I use Docker then I don't need a configuration management (CM) tool!
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
})
http.ListenAndServe(":8000", nil)
}
FROM google/golang
WORKDIR /gopath/src/app
ADD . /gopath/src/app/
RUN go get app
EXPOSE 8000
CMD []
ENTRYPOINT ["/gopath/bin/app"]
.
├── Vagrantfile
├── ansible.cfg
├── build.yml
├── build_docker_ansible_app.yml
├── deploy.yml
├── inventory
│ └── vagrant_build
│ └── hosts
└── roles
├── ansible
├── build_docker_ansible_app
├── docker_environment
├── docker_registry
├── java
├── jenkins
├── jenkins_deploy_keys
├── jenkins_jobs
└── known_hosts_github
- hosts: builder
sudo: yes
connection: ssh
pre_tasks:
- lineinfile: line='127.0.0.1 docker-registry.example.com' dest=/etc/hosts
roles:
- role: docker_environment
- role: known_hosts_github
- role: ansible
- role: docker_registry
- role: java
- role: jenkins
tags: ['jenkins']
- role: jenkins_jobs
tags: ['jenkins_jobs']
---
- command: docker build -t docker-registry.example.com:5000/docker_ansible_app ../docker_ansible_app
- command: docker push docker-registry.example.com:5000/docker_ansible_app
- docker: image=docker-registry.example.com:5000/docker_ansible_app ports="8000:8000" name="docker_ansible_app" state=running
---
- name: check if job exists
action: command java -jar {{ jenkins.cli_dest }} -s http://localhost:8080 list-jobs
register: tasks_installed
- name: copy config
copy: src="{{ job_name }}.xml" dest=/tmp/config.xml
- name: install task
action: shell java -jar {{ jenkins.cli_dest }} -s http://localhost:8080 create-job {{ job_name }} < /tmp/config.xml
when: tasks_installed.stdout.find(job_name) == -1
- name: update task
action: shell java -jar {{ jenkins.cli_dest }} -s http://localhost:8080 update-job {{ job_name }} < /tmp/config.xml
when: tasks_installed.stdout.find(job_name) != -1
ONBUILD can be used to run commands in child containers
docker logs docker_ansible_app
docker inspect docker_ansible_app
nsenter
ADD will decompress tar.gz files