├── Compose.md
├── Dockerfile.md
├── Installation.md
├── Libnetwork.md
├── Machine.md
├── NetworkingBasic.md
├── README.md
├── RunCommandAdanced.md
├── RunCommandBasics.md
├── Swarm.md
└── Volumes.md
/Compose.md:
--------------------------------------------------------------------------------
1 | Docker Compose
2 | -------------------
3 |
4 | ### Installation on OS X
5 |
6 | **Install Compose**
7 |
8 | ```
9 | sudo wget --no-check-certificate https://github.com/docker/compose/releases/download/1.2.0/docker-compose-`uname -s`-`uname -m`
10 |
11 | sudo mv docker-compose-`uname -s`-`uname -m` /usr/local/bin/docker-compose
12 |
13 | sudo chmod +x /usr/local/bin/docker-compose
14 |
15 | docker-compose --version
16 | ```
17 |
18 | **Install Docker (client) (if not already installed)**
19 |
20 | ```
21 | sudo wget --no-check-certificate -O /usr/local/bin/docker https://get.docker.com/builds/Darwin/x86_64/docker-latest
22 |
23 | sudo chmod +x /usr/local/bin/docker
24 |
25 | docker -v
26 | ```
27 |
28 | **Canonical Docker-Compose (Python/Redis) example**
29 |
30 | docker-compose.yml
31 |
32 | ```
33 | web:
34 | build: .
35 | command: python app.py
36 | ports:
37 | - "5000:5000"
38 | volumes:
39 | - .:/code
40 | links:
41 | - redis
42 | redis:
43 | image: redis
44 | ```
45 |
46 | Dockerfile
47 |
48 | ```
49 | FROM python:2.7
50 | ADD . /code
51 | WORKDIR /code
52 | RUN pip install -r requirements.txt
53 | ```
54 |
55 | app.py
56 |
57 | ```
58 | from flask import Flask
59 | from redis import Redis
60 | import os
61 | app = Flask(__name__)
62 | redis = Redis(host='redis', port=6379)
63 |
64 | @app.route('/')
65 | def hello():
66 | redis.incr('hits')
67 | return 'Hello World! I have been seen %s times.' % redis.get('hits')
68 |
69 | if __name__ == "__main__":
70 | app.run(host="0.0.0.0", debug=True)
71 | ```
72 |
73 | requirements.txt
74 |
75 | ```
76 | flask
77 | redis
78 | ```
79 |
80 | Commands
81 |
82 | ```
83 | docker-compose up -d
84 |
85 | docker-compose ps
86 |
87 | docker-compose logs
88 |
89 | curl localhost:5000
90 |
91 | docker-compose stop
92 | ```
93 |
94 | **Tomcat Sample example**
95 |
96 | ```
97 | docker pull tomcat
98 |
99 | docker history tomcat | grep -i expose
100 |
101 | cid=$(docker run -d -P tomcat)
102 |
103 | docker ps
104 |
105 | curl localhost:32xxx
106 |
107 | docker kill $cid
108 |
109 | docker rm $cid
110 | ```
111 |
112 | **Now let's Compose it...**
113 |
114 | compose-ex1.yml
115 |
116 | ```
117 | tomcatapp:
118 | image: tomcat
119 | ports:
120 | - "8080"
121 | ```
122 |
123 | Commands
124 |
125 | ```
126 | docker-compose -f compose-ex1.yml up -d
127 |
128 | docker-compose -f compose-ex1.yml ps
129 |
130 | docker-compose -f compose-ex1.yml logs
131 |
132 | curl localhost:32xxx
133 |
134 | docker-compose -f compose-ex1.yml stop
135 |
136 | docker-compose -f compose-ex1.yml rm
137 | ```
138 |
139 | **Now let's Compose it... (add a sample.war file)**
140 |
141 | Figure out where the webapps directory is
142 |
143 | ```
144 | docker run -it tomcat bash
145 |
146 | ls
147 | ```
148 |
149 | nginx.conf
150 |
151 | ```
152 | worker_processes 1;
153 |
154 | events { worker_connections 1024; }
155 |
156 | http {
157 |
158 | sendfile on;
159 |
160 | gzip on;
161 | gzip_http_version 1.0;
162 | gzip_proxied any;
163 | gzip_min_length 500;
164 | gzip_disable "MSIE [1-6]\.";
165 | gzip_types text/plain text/xml text/css
166 | text/comma-separated-values
167 | text/javascript
168 | application/x-javascript
169 | application/atom+xml;
170 |
171 | # List of application servers
172 | upstream app_servers {
173 |
174 | server tomcatapp1:8080;
175 | server tomcatapp2:8080;
176 | server tomcatapp3:8080;
177 |
178 | }
179 |
180 | # Configuration for the server
181 | server {
182 |
183 | # Running port
184 | listen [::]:80;
185 | listen 80;
186 |
187 | # Proxying the connections connections
188 | location / {
189 |
190 | proxy_pass http://app_servers;
191 | proxy_redirect off;
192 | proxy_set_header Host $host;
193 | proxy_set_header X-Real-IP $remote_addr;
194 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
195 | proxy_set_header X-Forwarded-Host $server_name;
196 |
197 | }
198 | }
199 | }
200 | ```
201 |
202 | compose-ex2.yml
203 |
204 | ```
205 | nginx:
206 | image: nginx
207 | links:
208 | - tomcatapp1:tomcatapp1
209 | - tomcatapp2:tomcatapp2
210 | - tomcatapp3:tomcatapp3
211 | ports:
212 | - "80:80"
213 | volumes:
214 | - nginx.conf:/etc/nginx/nginx.conf
215 | tomcatapp1:
216 | image: tomcat
217 | volumes:
218 | - sample.war:/usr/local/tomcat/webapps/sample.war
219 | tomcatapp2:
220 | image: tomcat
221 | volumes:
222 | - sample.war:/usr/local/tomcat/webapps/sample.war
223 | tomcatapp3:
224 | image: tomcat
225 | volumes:
226 | - sample.war:/usr/local/tomcat/webapps/sample.war
227 | ```
228 |
229 | Commands
230 |
231 | ```
232 | export COMPOSE_FILE=compose-ex2.yml
233 |
234 | docker-compose up -d
235 |
236 | docker-compose ps
237 |
238 | docker exec composetest_nginx_1 cat /etc/hosts
239 |
240 | docker exec composetest_tomcatapp1_1 ip a
241 |
242 | docker exec composetest_tomcatapp2_1 ip a
243 |
244 | docker exec composetest_tomcatapp3_1 ip a
245 |
246 | curl http://localhost/sample/
247 |
248 | docker-compose stop
249 | ```
250 |
251 |
--------------------------------------------------------------------------------
/Dockerfile.md:
--------------------------------------------------------------------------------
1 | Docker Dockerfile
2 | -------------------
3 |
4 | ### ON UBUNTU 14-10
5 |
6 | **Basic Three Commands FROM, RUN and CMD**
7 |
8 | apache-ex1
9 |
10 | ```
11 | FROM ubuntu:14.04
12 |
13 | RUN apt-get -y install apache2
14 |
15 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
16 | ```
17 |
18 | Commands
19 |
20 | ```
21 | docker build -f apache-dockerfile-ex1 -t apache-ex1 .
22 |
23 | docker images
24 |
25 | cid=$(docker run -itd apache-ex1)
26 |
27 | docker exec $cid ip a
28 |
29 | nid=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' $cid)
30 |
31 | curl $nid
32 | ```
33 |
34 | **Caching**
35 |
36 | ```
37 | docker build -f apache-dockerfile-ex1 -t apache-ex1 .
38 |
39 | docker build --no-cache=true -f apache-dockerfile-ex1 -t apache-ex1 .
40 | ```
41 |
42 | **Alternate Syntax**
43 |
44 | apache-ex2
45 |
46 | ```
47 | FROM ubuntu:14.04
48 |
49 | RUN ["apt-get","install","-y","apache2"]
50 |
51 | CMD /usr/sbin/apache2ctl -D FOREGROUND
52 | ```
53 |
54 | **Finding index.html**
55 |
56 | ```
57 | docker run -it apache-ex1 /bin/sh
58 |
59 | find / -name index.html
60 | ```
61 |
62 | **More Commands ADD and EXPOSE**
63 |
64 | apache-ex3
65 |
66 | ```
67 | FROM ubuntu:14.04
68 |
69 | RUN \
70 | apt-get update && \
71 | apt-get -y install apache2
72 |
73 | ADD index.html /var/www/html/index.html
74 |
75 | EXPOSE 80
76 |
77 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
78 | ```
79 |
80 | index.html
81 |
82 | ```
83 |
Docker Rocks!
84 | ```
85 |
86 | Commands
87 |
88 | ```
89 | cat index.html
90 |
91 | docker build -f apache-dockerfile-ex3 -t apache-ex3 .
92 |
93 | cid=$(docker run -itd -P apache-ex3)
94 |
95 | nid=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' $cid)
96 |
97 | curl $nid
98 | ```
99 |
100 | Show from Web Browser
101 |
102 | ```
103 | ip a show eth1
104 |
105 | docker ps -a
106 | ```
107 |
108 | **Volume Command**
109 |
110 | apache-ex4
111 |
112 | ```
113 | FROM ubuntu:14.04
114 |
115 | VOLUME [ "/var/www/html" ]
116 |
117 | ADD index.html /var/www/html/index.html
118 |
119 | RUN \
120 | apt-get update && \
121 | apt-get -y install apache2
122 |
123 | EXPOSE 80
124 |
125 | CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
126 | ```
127 |
128 | Commands
129 |
130 | ```
131 | docker build -f apache-dockerfile-ex4 -t apache-ex4 .
132 |
133 | cid=$(docker run -itd -v ~/test/index.html:/var/www/html/index.html wordpress-ex4)
134 |
135 | nid=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' $cid)
136 |
137 | curl $nid
138 | ```
139 |
140 | Modify index.html
141 |
142 | curl $nid
143 |
144 | **Final Touches**
145 |
146 | apache-ex5
147 |
148 | ```
149 | FROM ubuntu:14.04
150 |
151 | MAINTAINER John Willis
152 | ENV REFRESHED_AT 2016-04-20
153 |
154 | VOLUME [ "/var/www/html" ]
155 | WORKDIR /var/www/html
156 |
157 | ADD index.html /var/www/html/index.html
158 |
159 | RUN \
160 | apt-get update && \
161 | apt-get -y install apache2
162 |
163 | EXPOSE 80
164 |
165 | ENTRYPOINT ["/usr/sbin/apache2ctl"]
166 | CMD ["-D", "FOREGROUND"]
167 | ```
168 |
169 | Show Using Variable for Refresh
170 |
171 | ```
172 | docker build -f apache-dockerfile-ex5 -t apache-ex5 .
173 |
174 | docker build -f apache-dockerfile-ex5 -t apache-ex5 .
175 | ```
176 |
177 | Modify REFRESH VARIABLE in the Dockerfile
178 |
179 | ```
180 | docker build -f apache-dockerfile-ex5 -t apache-ex5 .
181 | ```
182 |
183 |
--------------------------------------------------------------------------------
/Installation.md:
--------------------------------------------------------------------------------
1 | Docker Installation
2 | -------------------
3 |
4 | ### ON UBUNTU 14-10
5 |
6 | **Repo install usually back leveled**
7 |
8 | sudo apt-get install -y docker.io #
9 | sudo usermod -aG docker vagrant
10 | docker info
11 | docker -v
12 | docker version
13 | sudo service docker restart
14 |
15 | **Use (for latest)**
16 |
17 | wget -qO- https://get.docker.com/ | sh
18 |
19 | **Pre release**
20 |
21 | wget -qO- https://test.docker.com/ | sh
22 |
23 | **Basic Commands**
24 |
25 | docker info
26 | docker -v
27 | docker version
28 | sudo service docker restart
29 |
30 | ### Centos 7
31 |
32 | **Repo install usually back leveled**
33 |
34 | sudo yum install docker
35 | sudo service docker start
36 | sudo chkconfig docker on #(start at boot)
37 | docker info
38 | docker version
39 | sudo service docker restart
40 |
41 | **Alternativly (for latest)**
42 |
43 | sudo wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O /usr/bin/docker
44 | sudo chmod +x /usr/bin/docker
45 | sudo /usr/bin/docker -d &
46 | sudo docker info
47 | sudo docker version
48 |
49 | **( a plane install, no docker conf.. not startup configs..)**
50 |
51 | ### On Fedora 20
52 |
53 | sudo yum -y remove docker
54 | sudo yum install docker-io
55 | sudo service docker start
56 | sudo chkconfig docker on (start at boot)
57 |
58 |
--------------------------------------------------------------------------------
/Libnetwork.md:
--------------------------------------------------------------------------------
1 | ## Getting Started with Libnetwork ##
2 |
3 | # Install
4 |
5 | ```
6 |
7 | sudo apt-get install -y unzip
8 |
9 | wget -qO- https://experimental.docker.com/ | sh
10 |
11 | cd /usr/bin
12 | sudo wget https://dl.bintray.com/mitchellh/consul/0.5.2_linux_amd64.zip
13 | unzip *.zip
14 | rm *.zip
15 |
16 | # On host 1
17 |
18 | sudo /usr/bin/docker -d --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth1
19 |
20 | sudo /usr/bin/docker -d --default-network=overlay:multihost --kv-store=consul:192.168.33.10:8500 --label=com.docker.network.driver.overlay.bind_interface=eth1
21 |
22 | echo DOCKER_OPTS=\\"--default-network=overlay:multihost --kv-store=consul:192.168.33.10:8500 --label=com.docker.network.driver.overlay.bind_interface=eth1 \\" >> /etc/default/docker
23 |
24 | service docker restart
25 |
26 |
27 | consul agent -server -bootstrap -data-dir /tmp/consul -bind=10.254.101.22 &
28 |
29 | # Ohost 2
30 |
31 | sudo /usr/bin/docker -d --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth1 --label=com.docker.network.driver.overlay.neighbor_ip=10.254.101.21
32 |
33 |
34 | echo DOCKER_OPTS=\\"--default-network=overlay:multihost --kv-store=consul:192.168.33.10:8500 --label=com.docker.network.driver.overlay.bind_interface=eth1 --label=com.docker.network.driver.overlay.neighbor_ip=192.168.33.11\\" >> /etc/default/docker
35 |
36 | service docker restart
37 |
38 | consul agent -server -bootstrap -data-dir /tmp/consul -bind=10.254.101.22 &
39 |
40 | consul agent -data-dir /tmp/consul -bind=10.254.101.22 &
41 |
42 | consul join 10.254.101.21
43 |
44 | ```
45 |
46 | # On Machine 1
47 |
48 | ```
49 | docker network create -d overlay prod
50 |
51 | docker network ls
52 |
53 | docker network info prod
54 |
55 | docker service publish db1.prod
56 |
57 | cid=$(docker run -itd --net=none ubuntu)
58 |
59 | docker service attach $cid db1.prod
60 |
61 | docker exec -it $cid sh
62 | cat /etc/hosts
63 |
64 | ```
65 |
66 | # On Machine 2
67 |
68 | ```
69 | docker network info
70 |
71 | docker network ls
72 |
73 | cid=$(docker run -itd --net=none ubuntu)
74 |
75 | docker service publish db2.prod
76 |
77 | docker service attach $cid db2.prod
78 | ```
79 |
--------------------------------------------------------------------------------
/Machine.md:
--------------------------------------------------------------------------------
1 | Docker Machine
2 | -------------------
3 |
4 | ### Installation on OSX
5 |
6 | **Install Machine**
7 |
8 | ```
9 | sudo wget --no-check-certificate -O /usr/local/bin/docker-machine https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_darwin-amd64
10 |
11 | sudo chmod +x /usr/local/bin/docker-machine
12 |
13 | docker-machine -v
14 | ```
15 |
16 | **Install Docker (client)**
17 |
18 | ```
19 | sudo wget --no-check-certificate -O /usr/local/bin/docker https://get.docker.com/builds/Darwin/x86_64/docker-latest
20 |
21 | sudo chmod +x /usr/local/bin/docker
22 |
23 | docker -v
24 | ```
25 |
26 | ### Running Machine on Virtualbox
27 |
28 | ```
29 | docker-machine create --driver virtualbox dev1
30 |
31 | docker-machine ls
32 |
33 | eval "$(docker-machine env dev1)"
34 |
35 | docker run busybox echo hello world
36 |
37 | docker ps -a
38 |
39 | ```
40 |
41 | ### Running Machine on Digital Ocean
42 |
43 | ```
44 | docker-machine create --driver digitalocean --digitalocean-access-token=$DIGITAL_OCEAN_TOKEN dev2
45 |
46 | docker-machine ls
47 |
48 | eval "$(docker-machine env dev2)"
49 |
50 | docker-machine ls (show the active machine)
51 |
52 | docker run busybox echo hello world
53 |
54 | docker ps -a
55 | ```
56 |
57 | ### Running Machine on Amazon EC2
58 |
59 | ```
60 | docker-machine -D create --driver amazonec2 --amazonec2-access-key $AWS_ACCESS_KEY_ID --amazonec2-secret-key $AWS_SECRET_ACCESS_KEY --amazonec2-vpc-id $AWS_VPC_ID --amazonec2-zone b dev3
61 |
62 | docker-machine ls
63 |
64 | eval "$(docker-machine env dev3)"
65 |
66 | docker-machine ls (show the active machine)
67 |
68 | docker run busybox echo hello world
69 |
70 | docker ps -a
71 | ```
72 |
73 |
--------------------------------------------------------------------------------
/NetworkingBasic.md:
--------------------------------------------------------------------------------
1 | Docker Basic Networking
2 | -------------------
3 |
4 | ** Setup **
5 |
6 | sudo apt-get install -y bridge-utils curl
7 | docker run -d --name db -p 3306:3306 mysql
8 | docker run -d --name wp1 -p 80:80 wordpress
9 | docker run -d --name wp2 -p 81:80 wordpress
10 |
11 | **Commands**
12 |
13 | ip a ( explain eth0=nat eth1 my ip, docker0= bridge) (docker0 sunset /16 65k)
14 |
15 | ip a show docker0
16 |
17 | **Explain docker0 (this is a virtual bridge and the IP is the gateway for all contianers
18 | on this docker host)**
19 |
20 | **172.17.42.1/16**
21 |
22 | docker run -itd —name u1 ubuntu
23 | docker exec u1 ip a
24 |
25 | ip a
26 |
27 | brctl show docker0 (explain veth each container has a eth0 veth pair)
28 |
29 | docker run -it —name u2 ubuntu
30 | sudo apt-get update
31 | sudo apt-get install -y inetutils-traceroute
32 |
33 | traceroute docker.com
34 |
35 | **(look at iptables nat configuration)**
36 | sudo iptables -t nat -L -n (docker also setup masquerade rule for all container traffic).
37 | **allows any outbound but by default no inbound…(show the masa rule)**
38 |
39 | **(these rules are configured dynamically by docker based on how you use the EXPOSE**
40 | docker history httpd (look at the expose cmd for port 80)
41 |
42 | docker run -itd --name web1 -P httpd
43 |
44 | docker exec web1 ip a (look at the ip address)
45 |
46 | sudo iptables -t nat -L -n
47 |
48 | curl localhost:32768
49 |
50 | docker run -itd --name web2 -p 80 httpd
51 |
52 | sudo iptables -t nat -L -n (look at the new DNAT rule)
53 |
54 | docker run -itd --name web3 -p 8080:80 httpd
55 |
56 | sudo iptables -t nat -L -n (look at the new DNAT rule)
57 |
58 | curl localhost::8080
59 |
60 | **on the LAMP stack setup docker host**
61 |
62 | docker ps (look at my three machines… )
63 |
64 | ip a ( explain eth0=nat eth1 my ip, docker0= bridge) (docker0 sunset /16 65k)
65 |
66 | brctl show docker0 (explain veth )
67 |
68 | sudo iptables -t nat -L -n (docker also setup masquerade rule for all container traffic).
69 |
70 | **allows any outbound but by default no inbound…(show the masa rule)**
71 |
72 | ip addr show eth1
73 |
74 | **hit the web page… at 80 then at 8080 then 1936**
75 |
76 | cat /etc/haproxy/haproxy.cfg
77 |
78 | docker run -d --name wp3 -p 82:80 wordpress
79 |
80 | docker exec wp3 ip a
81 |
82 | sudo vi /etc/haproxy/haproxy.cfg (add new interface)
83 |
84 | sudo service haproxy reload
85 |
86 | **hit 1936**
87 |
88 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DockerDo
2 | ##Docker How To Do's
3 |
4 | This is a repository of cheat sheets for doing different things with Docker. If you are new to Docker I recomend you watch the tutorial videos (see below). The intial files can be view in any order; however, this is the suggested first list:
5 |
6 | 1. Installation.md
7 | 2. RunCommandBasics.md
8 | 3. Volumes.md
9 | 4. RunCommandAdvanced.md
10 | 5. NetworkBasic.md
11 | 6. Dockerfile.md
12 | 7. Machine.md
13 | 8. Compose.md
14 | 9. Swarm.md
15 | 10. Libnetwork.md
16 |
17 |
18 | ## Video Tutorials
19 |
20 | - [Docker Tutorial 1 - Installing Docker](https://www.youtube.com/watch?v=bV5vbNK3Uhw)
21 | - [Docker Tutorial 2 - Docker Run Command Basics](https://www.youtube.com/watch?v=uTe08FxoKrU)
22 | - [Docker Tutorial 3 - Fun With Volumes](https://www.youtube.com/watch?v=rlK1JYsM6Aw)
23 | - [Docker Tutorial 4 - More Run](https://www.youtube.com/watch?v=ZgjHM1XmAKI)
24 | - [Docker Tutorial 5 - Basic Networking](https://www.youtube.com/watch?v=3uvqEC8fWV0)
25 | - [Docker Tutorial 6 - Dockerfiles (Part 1)](https://www.youtube.com/watch?v=gG_x28rDxus)
26 | - [Docker Tutorial 7 - Dockerfiles (Part 2)](https://www.youtube.com/watch?v=L6bjTlVdc6U)
27 | - [Docker Tutorial 8 - Troubleshooting with Sysdig](https://www.youtube.com/watch?v=S-fYCOMnsbY)
28 | - [Docker Tutorial 9 - Docker Machine](https://www.youtube.com/watch?v=3zXe3uXQnSY)
29 | - [Docker Tutorial 10 - Docker Compose](https://www.youtube.com/watch?v=gtoT0By8yh4)
30 | - [Docker Tutorial 11 - Docker Swarm](https://www.youtube.com/watch?v=zTKGfPfhg78)
31 | - [Docker Tutorial 12 - Kitematic](https://www.youtube.com/watch?v=50IZ-AHPKo0)
32 | - [Docker Tutorial 13 - Libnetwork](https://www.youtube.com/watch?v=gZ6UKym9ZIs)
33 |
--------------------------------------------------------------------------------
/RunCommandAdanced.md:
--------------------------------------------------------------------------------
1 | Doccker - Run Commands Advanced
2 | -------------------
3 |
4 | Look at docker hub
5 | check out ubuntu, centos and fedora
6 |
7 | **Search dockerhub**
8 |
9 | docker -v
10 | history
11 | docker search ubuntu
12 | docker search -s 10 ubuntu
13 | docker search --no-trunc=true -s 10 ubuntu
14 |
15 | docker images
16 | docker pull ubuntu
17 | docker pull ubuntu:14.04
18 | docker pull ubuntu:trusty
19 | docker images
20 |
21 | ( explain all 5 tags and tagging)
22 |
23 | docke
24 | docker ps (look at what happened.. ran /bin/bash)
25 |
26 | docker run -itd ubuntu /bin/sh
27 | docker ps (look at what happened.. ran /bin/sh)
28 |
29 | docker history (Show the CMD)
30 |
31 | docker run -itd ubuntu uname -a
32 | docker ps -a (look at what happened..no in the CMD STDIN gone)
33 | docker logs
34 |
35 | docker run -itd ubuntu sleep 10 && watch docker ps
36 |
37 | **cleanup**
38 |
39 | docker kill $(docker ps -q) && docker rm $(docker ps -aq)
40 |
41 | docker run -itd --name job1 ubuntu /bin/sh -c "while true; do echo Docker Rocks; sleep 1; done"
42 |
43 | docker logs -h
44 | docker logs -ft job1
45 |
46 | docker kill job1
47 | docker rm job1
48 | docker ps -a
49 |
50 | docker run -itd --name job2 ubuntu /bin/sh -c "while true; do echo Docker Rocks; sleep 1; done"
51 | docker kill $(docker ps -lq) (stop the last container)
52 | docker rm $(docker ps -lq)
53 |
54 | **Fun with PIDS**
55 |
56 | docker run -itd --name job2 ubuntu /bin/sh -c "while true; do echo Docker Rocks; sleep 1; done"
57 | docker stats job2
58 | watch docker top job2 -ef (watch the pid change)
59 | docker exec -itd job2 sleep 20
60 | watch docker top job2 -ef
61 |
62 | **Using Inspect **
63 |
64 | docker inspect -h
65 | docker inspect job2
66 | docker inspect --format '{{.Name}} {{.State.Running}}' job2
67 |
68 | **Fun with 1.6 **
69 |
70 | docker ps -a
71 | docker run -itd --name job4 --label=NodeNumber=3 --label=NodeType=cluster ubuntu
72 | docker inspect job4 > jmw.out (find /Labels)
73 | docker inspect --format '{{.Name}} {{.Config.Labels.NodeType}}' job4
74 |
75 | cid=$(docker run -itd ubuntu)
76 | docker attach $cid
77 | ulimit -a
78 | cid=$(docker run -itd --ulimit nofile=1024:1024 ubuntu)
79 | docker attach $cid
80 | ulimit -a
81 |
82 | ```
83 | cid=$(docker run -itd --ulimit nofile=1024:1024 --ulimit core=102400 --ulimit nproc=1000 --ulimit nice=100 --ulimit memlock=8196 --ulimit fsize=8192 --ulimit rss=4096 --ulimit cpu=4 --ulimit locks=1000 --ulimit sigpending=100 --ulimit msgqueue=1000 --ulimit nice=100 --ulimit rtprio=100 ubuntu)
84 |
85 | docker attach $cid
86 | ulimit -a
87 | ```
88 |
89 |
--------------------------------------------------------------------------------
/RunCommandBasics.md:
--------------------------------------------------------------------------------
1 | Docker Run Command Basics
2 | -------------------
3 |
4 | **Run first container**
5 |
6 | docker ps -a
7 | docker run busybox
8 | docker ps
9 | docker ps -a
10 | docker run -i busybox (STDIN)
11 | ls
12 | pwd
13 | hostname
14 |
15 | **(Crtl-d) to cancel**
16 |
17 | docker ps
18 | docker ps -a
19 | docker run -t busybox
20 |
21 | **Note: a ctrl-c doesn't kill it**
22 |
23 | docker ps
24 | docker ps -a
25 | docker run -it busybox
26 |
27 | **(basic Shell)**
28 |
29 | hostname
30 | ps -ef
31 | exit
32 | docker ps
33 | docker ps -a
34 |
35 |
36 | docker run -it busybox
37 | hostname
38 | ps -ef
39 |
40 | **ctrl-p-q (quits without killing the container)**
41 |
42 | docker ps
43 | docker ps -a
44 | docker run -d busybox
45 |
46 | **(It's gone)**
47 |
48 | docker ps
49 | docker ps -a
50 |
51 |
52 | docker run -itd busybox
53 | docker ps
54 | docker attach xxxx
55 | ls
56 |
57 | **ctrl-p-q (quits without killing docker attach the container***
58 |
59 | docker ps --no-trunc=true
60 |
61 | **(long CID)**
62 |
63 | cid=$(docker run -itd busybox)
64 | echo $cid
65 | docker inspect $cid
66 | docker inspect --format '{{.NetworkSettings.IPAddress}}' $cid
67 | docker stop $cid
68 |
69 | **Or.. .use the name**
70 |
71 | docker run --name john1 -itd busybox
72 | docker attach john1
73 | docker stop john1
74 | docker run -itd busy box
75 | docker run -itd busy box
76 | docker run -itd busy box
77 | docker run -itd busy box
78 | docker run --name john2 -itd busybox
79 | docker run --name john3 -itd busybox
80 | docker ps -q
81 |
82 |
83 | docker ps
84 | docker rm
85 | docker rm $(docker ps -aq)
86 |
87 |
--------------------------------------------------------------------------------
/Swarm.md:
--------------------------------------------------------------------------------
1 | Docker Swarm
2 | -------------------
3 |
4 | **Setup**
5 |
6 | ```
7 | docker-machine create --driver virtualbox dev1
8 |
9 | eval "$(docker-machine env dev1)"
10 |
11 | docker pull swarm
12 |
13 | docker history swarm
14 |
15 | docker run swarm #(get help)
16 | ```
17 |
18 | **Create a Cluster**
19 |
20 | ```
21 | sid=$(docker run swarm create)
22 |
23 | files $ echo $sid
24 | 1ffdb70193793b943df9456a35c24817
25 | ```
26 |
27 | **Create the Swarm Manager**
28 |
29 | ```
30 | docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://$sid swarm-master
31 |
32 | docker-machine ls
33 |
34 | eval "$(docker-machine env swarm-master)"
35 |
36 | docker-machine ls
37 |
38 | docker info
39 | ```
40 |
41 | **Create Swarm Nodes**
42 |
43 | ```
44 | docker-machine create -d virtualbox --engine-label itype=frontend --swarm --swarm-discovery token://$sid swarm-node-01
45 |
46 | docker-machine create -d virtualbox --swarm --swarm-discovery token://$sid swarm-node-02
47 |
48 | docker-machine create -d virtualbox --swarm --swarm-discovery token://$sid swarm-node-03
49 |
50 | docker-machine ls
51 |
52 | docker-machine env --swarm swarm-master # (checkout the different port)
53 |
54 | eval "$(docker-machine env --swarm swarm-master)"
55 |
56 | docker-machine ls (Notice non of the docker machines have the asterick)
57 |
58 | docker info
59 |
60 | docker run swarm list token://$sid
61 |
62 | docker ps #(no containers are running in the swarm)
63 | ```
64 |
65 | **Look at the Four Nodes**
66 |
67 | ```
68 | docker-machine ls
69 |
70 | eval "$(docker-machine env swarm-master)"
71 |
72 | docker ps
73 |
74 | eval "$(docker-machine env swarm-node-01)"
75 |
76 | docker ps
77 |
78 | eval "$(docker-machine env swarm-node-02)"
79 |
80 | docker ps
81 |
82 | eval "$(docker-machine env swarm-node-03)"
83 |
84 | docker ps
85 | ```
86 |
87 | **Running Docker Instances with Swarm (explain Spead vs Binpack**
88 |
89 | ```
90 | eval "$(docker-machine env --swarm swarm-master)"
91 |
92 | docker ps
93 |
94 | docker run -itd --name engmgr ubuntu
95 |
96 | docker ps
97 |
98 | for i in `seq 1 6`; do docker run -itd -e constraint:itype!=frontend --name eng$i ubuntu; done
99 |
100 | docker ps
101 |
102 | docker run -itd --name engmgr-c -e affinity:container==engmgr ubuntu
103 | ```
104 |
105 | **Cleanup**
106 |
107 | ```
108 | docker-machine kill $(docker-machine ls -q)
109 |
110 | docker-machine rm $(docker-machine ls -q)
111 | ```
112 |
--------------------------------------------------------------------------------
/Volumes.md:
--------------------------------------------------------------------------------
1 | Docker Volumes
2 | -------------------
3 | **setup**
4 |
5 | ```
6 | FROM ubuntu:14.04
7 |
8 | MAINTAINER John Willis
9 |
10 | VOLUME ["/john99"]
11 |
12 | CMD ["/bin/sh"]
13 | ```
14 | docker build -f myimage.dockerfile -t myimage .
15 |
16 | **Volumes**
17 |
18 | (***Simple Run***)
19 |
20 | docker run -it -v /john1 busybox
21 | cd john1
22 | touch file1
23 | ctrl-p-q # Keep in running
24 |
25 | docker restart
26 | docker exec ls /john1
27 |
28 | The file stays until we remove the container
29 | however, if we start a new container based on the orgi busybox image
30 |
31 | docker run -it -v /john1 busybox
32 | cd john1
33 | ls (not there) This was a new run..
34 | exit
35 |
36 | We can also have volumes that have volumes defined in the imagee build..
37 |
38 | docker images (show my image)
39 | docker inspect
40 | docker history
41 |
42 | docker run -itd myimage
43 | cd mydir
44 | ls (file1 will alwys be there)
45 | touch file2 (same rues apply)
46 | ls
47 | exit
48 |
49 | docker run -it -v /john1 myimage
50 | ls (both directories)
51 |
52 | cd into both directories
53 |
54 | Switch back to the docker host..
55 |
56 | ```
57 | mkdir john3
58 | cd john3
59 | touch file3
60 | touch file4
61 |
62 | docker run -it -v /vagrant/john3:/john3 myimage (host needs to be abs path)
63 | ```
64 |
65 | ## good for testing src code ##
66 |
67 | ```
68 | cd john3
69 | ls
70 | touch file5
71 | ls
72 | exit
73 | ```
74 |
75 | on docker host..
76 |
77 | ```
78 | cd john3
79 | ls (see files 3 and 4 and 5)
80 |
81 | docker run -it -v ~/john3:/john3:ro myimage (point out ~)
82 | cd john3
83 | vi file5
84 | save???
85 |
86 | docker run -it -v ~/.bash_history:/.bash_history myimage
87 |
88 | docker ps -a (see what's running)
89 | docker kill $(docker ps -q)
90 | docker rm $(docker ps -aq)
91 | docker ps -a
92 |
93 | docker run -it --name john1 -v ~/john3:/john3 myimage
94 | ls (directories are there.. and files trust me)
95 | ### ctrl-pq (keep running)
96 |
97 | docker ps
98 |
99 | docker run -it --name john2 --volumes-from john1 myimage
100 | ls
101 | ### ctrlpq
102 |
103 | docker run -it --name john3 --volumes-from john2 myimage
104 |
105 | ***(make a backup)**
106 |
107 | docker run --rm --volumes-from john1 -v $(pwd):/backup busybox tar cvf /backup/john2.tar /john
108 | ```
109 |
110 |
--------------------------------------------------------------------------------