├── 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 | --------------------------------------------------------------------------------