pig's diary

何でも忘れるので万年初心者ね

Docker おぼえがき

Be careful it's optimized only for me so the format probably doesn't make sense to you.

Docker

Build docker image without cache with a Dockerfile of the current directory with a name identiproxy with a tag 0.1

docker build --no-cache -t identiproxy:0.1 .

Stop and remove all running containers

docker ps -qa | xargs docker rm -f

Machine

Create a machine using generic (ssh) driver against 10.0.1.211 with a name "n1".

docker-machine create --driver generic --generic-ip-address=10.0.1.211 n1

https://docs.docker.com/machine/drivers/generic/#example Or against DigitalOcean

docker-machine create --driver digitalocean --digitalocean-access-token d40576... identihost-do

Others

Switch machine context

eval `docker-machine env n1`

Show machine ip address

docker-machine ip n1

Compose

https://docs.docker.com/compose/compose-file/#compose-and-docker-compatibility-matrix

Swarm

Initalize manager

docker-machine ssh n1 \
    docker swarm init --advertise-addr 10.0.1.211

# Remember the output command line

Join as a worker

docker-machine ssh n2 \
    docker swarm join --token SWMTKN... 10.0.1.211:2377

List swarm nodes

docker-machine ssh n1 docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
cfy4gr1s6b2dbz13fuxp7b8pd *   n1                  Ready               Active              Leader
nen91w96s0huyregcvtwgn2dx     n3                  Ready               Active
t5blonb35i8z4g8wf4bywkdm3     n2                  Ready               Active

# Note that the command is runnable only on manager node

Start nginx in the cluster

docker-machine ssh n1 docker service create --replicas 3 --name nginxes -p 80:80 nginx

# Or

eval `docker-machine env n1`
docker service create --replicas 3 --name nginxes -p 80:80 nginx

# *Thankfully*, even though the number of replicas is 2, all nodes can return :80 service, so that we don't have to think which node will run the tasks.

List running services

docker service ls

Update running services

docker service update --publish-rm 80:80 nginxes
# It removes published ports 80

docker service update --publish-add 80:80 nginxes
# It exports 80 again

docker service update --args "ping docker.com" helloworld
# You can even update args you passed on startup