Docker

Docker #

docker img

教程手册 #

好用的使用教程

Install #

略过~ 😁

打镜像和跑 #

docker build -t server:v0 . -f server.dockerfile

#

docker run -p 9080:80 --name server server:v0

指定启动命令 #

sudo docker run -it -p 9080:80 --name nova_server nova_server:v0 sh -c "echo hello"

加入自定义网络 #

--network {{network name}} 详见:[[#Network]]

跑出问题-进入容器排查 #

sudo docker run -it -p 9080:80 --name nova_server nova_server:v0 sh -c "bash"

使用-it进入容器手动执行命令进行调试

启动全部容器 #

docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker start

Network #

  1. docker run时容器加入方法-redis为例
  2. 后期加入方式
  3. 创建一个新网
  4. 检测
    init_redis:
    	docker run -p 6379:6379 \\
    	--network websafe-network \\
    	--name redislatest redis:latest --requirepass 3b21d032a7fd8eb51fa7bd8a2e812b78b7b3a36f 
    
    join_network:
    	docker network connect websafe-network mysql56
    	docker network connect websafe-network daemon-xxx
    
    init_network:
    	docker network create websafe-network
    
    check_network:
    	docker network inspect websafe-network
    	docker network inspect websafe-network | findStr IPv4Address
    

删除 #

可视化 #

go install github.com/jesseduffield/lazydocker@latest

如果需要sudo权限的话无法直接执行命令,只能where获取原始路径后sudo+原始路径执行 如:

  • sudo /home/ian/go/bin/lazydocker
  • sudo lazydocker

常见问题和模板 #

用户sudo问题 #

debian增加docker用户组,优化每次sudo问题

sudo groupadd docker # 安装完docker.io之后一般都会自动创建所以这一步其实没啥用
sudo gpasswd -a $USERNAME docker
newgrp docker # 更新

Docker Mysql编码 #

version: "2.2"
services:
  redis:
    image: "redis"
    # ports:
    #  - 6379:6379
    command: redis-server --appendonly yes #一个容器启动时要运行的命令
    restart: always # 自动重启
  myserver:
    image: mainName/myserver
    restart: always # 自动重启
  mainServer:
    image: mainName/mainServer
    #    container_name: mainServerv1.0.0
    depends_on:
      - redis
    ports:
      - 9001:9001
    restart: always
    volumes:
      - "./logs:/src/build/logs"
    links:
      - redis
      - myserver

mysql 编码问题|单条: docker run --name predix_mysql -e MYSQL_ROOT_PASSWORD=predix123predix -p 33061:3306 -e LANG=C.UTF-8 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

时间修改 #

FROM alpine:3.14
RUN apk add -U tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&  echo "Asia/Shanghai" > /etc/timezone

ENV TZ=Asia/Shanghai \
    GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64 \
    PROGRAM_ENV=pro

WORKDIR /src/build

# 复制构建应用程序所需的代码
COPY ./build .

EXPOSE 8088

CMD ["./main"]

bash进入某App内 #

docker exec -it webserver bash

webserver 为APP名称

Swarm #

Docker Compose Docker Machine: Mac、Windows区别预先安装。 Linux直接安装 Win10 Hyper-V 发布镜像 镜像充当已部署容器,填写必要信息:username、repo、tag dockers-compose.yml 副本

其实以上在官方教程有很好说明在这里,但毕竟高级应用,暂且记下。

创建虚拟机来试验一下 #

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

第一个管理节点:docker swarm init,第二个工作节点`docker swarm join``

should like this show: #
$ docker-machine ssh myvm1 "docker swarm init"
Swarm initialized: current node <node ID> is now a manager.

To add a worker to this swarm, run the following command:

  docker swarm join \
  --token <token> \
  <ip>:<port>

通过运行 docker-machine ls 来复制 myvm1 的 IP 地址,然后使用 该 IP 地址并通过 –advertise-addr 指定端口 2377(用于 swarm join 的端口), 以便再次运行 docker swarm init 命令。例如:

    docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
复制此命令,然后通过 docker-machine ssh 将其发送给 myvm2,从而让 myvm2 加入 #
$ docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"

This node joined a swarm as a worker.

至此, 创建swarm完成。 #

连接 #

使用ssh连接docker-machine ssh myvm1,运行docker node ls查看此中节点。

Mybe like this. #

docker@myvm1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd     myvm2               Ready               Active              
rihwohkh3ph38fhillhhb84sk *   myvm1               Ready               Active              Leader

mybe not you are ture. 😂

之后,其余东西z有用到再去官网查看吧。 记录与否,取决于俺。