Docker Notes
Contents
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