Contents

Docker Notes

Common Installation

PostgreSQL

docker volume create postgres
docker run --name postgres --network net -p 5432:5432 -e POSTGRES_USER=root -e POSTGRES_PASSWORD=123456 -e POSTGRES_DB=postgres -v postgres:/var/lib/postgresql/data -d postgres

RabbitMQ

docker volume create rabbitmq
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq --network net -v rabbitmq:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3-management

Nginx

docker run -d -p 80:80 -p 443:443 \
-v /etc/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /etc/docker/nginx/logs:/var/log/nginx \
-v /etc/docker/nginx/www:/var/www \
-v /etc/docker/nginx/cert:/etc/nginx/cert \
-v /etc/docker/nginx/conf.d:/etc/nginx/conf.d \
--name nginx nginx


docker run -d -p 80:80 -p 443:443 -v /etc/docker/nginx:/etc/nginx --name nginx nginx

Redis

docker volume create redis
docker run --name redis --network net -v redis:/data -p 6379:6379 -d redis:latest --requirepass "123456" --dir /data

MySQL

docker volume create mysql
docker run --name mysql --network net -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v mysql:/var/lib/mysql -d mysql/mysql-server

无法连接 MySQL? 尝试执行以下命令。

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

导出数据库

docker exec -it mysql mysqldump -p123456 database [table] --where="true limit 50" > /root/database_50.sql

RabbitMQ

docker volume create rabbitmq
docker run --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 -v rabbitmq:/var/lib/rabbitmq -d rabbitmq:management

Commonly Used Commands

docker search redis
docker pull redis

docker ps -aq
docker ps -af status=exited  (created|restarting|running|removing|paused|exited|dead)
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}\t{{.Status}}"

docker start $(docker ps -aqf status=exited)
docker ps -aqf status=exited | xargs docker start
docker stop redis
docker inspect redis | grep Mounts -A 20

docker rm redis

docker logs redis
docker logs --tail 8 redis
docker logs --since 3s redis
docker port redis

docker run -it nginx bash
docker run -it --rm linkd:v8 sh
docker exec -it nginx bash
docker exec -it ee7f1c1c8a49 sh
docker exec -it ee7f1c1c8a49 /bin/sh

docker image tag registry.cn-hangzhou.aliyuncs.com/anoy/yapi ali/anoy/yapi
docker rmi registry.cn-hangzhou.aliyuncs.com/anoy/yapi

docker inspect mysql | grep -i ipaddress   // 忽略大小写
docker inspect mysql | grep -A10 mounts   // 返回匹配的后10行
docker inspect mysql | grep -B10 mounts   // 返回匹配的前10行
docker inspect mysql --format '{{json .Mounts}}'

docker run --rm -it -v <old-volume>:/from -v <new-volume>:/to alpine sh -c "cp -av /from/. /to"

Package Go Application

docker build时带好参数--force-rm可删除中间镜像

ROM alpine  AS builder

# download timezone and certificates files
RUN apk update
RUN apk --no-cache add tzdata zip ca-certificates
WORKDIR /usr/share/zoneinfo
RUN zip -q -r -0 /zoneinfo.zip .


FROM scratch

# copy timezone and certificates files
ENV ZONEINFO /zoneinfo.zip
COPY --from=builder /zoneinfo.zip /
COPY --from=builder /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# copy the binary file main
WORKDIR /root
COPY --from=builder /root/app .
EXPOSE 6666
ENTRYPOINT ["./app"]

Docker Compose

docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml stop
docker-compose -f docker-compose.yml down

Docker Swarm

manager node 192.168.99.100
worker node 192.168.99.101

Excute command on manager node

docker swarm init --advertise-addr 192.168.99.100

Excute command on worker node

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377

Create service

docker service create --replicas 2 \
--publish published=6666,target=6666 \
-p 8800:8800 \
--name hejtao
hejtao

Externally Connect to Docker

Create daemon.json file in /etc/docker:

{"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]}

Add /etc/systemd/system/docker.service.d/override.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

Reload the systemd daemon:

systemctl daemon-reload

Restart docker:

systemctl restart docker.service

Update Container on Mac Desktop Docker

Enter the virtual machine

docker run -it --rm --privileged --pid=host justincormack/nsenter1

Locate the config files

cd var/lib/docker/containers/<container_id>

Modify the config files

vi hostconfig.json
vi config.v2.json

Quit and Reopen Docker Desktop

Start the container