基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
相对于传统虚拟机,Docker 没有硬件虚拟化,可以运行在物理机、虚拟机, 甚至嵌套运行在 Docker 容器内,并且其不携带操作系统的,会轻巧很多。而且调用资源时利用
Docker Engine
去调用宿主的的资源,这时候过程是虚拟内存->真正物理内存。
Portainer 统一管理
安装Portainer Community Edition (CE)而不是Portainer Business Edition (BE)
WSL的安装
和linux类似
# 创建 Portainer Server 将用于存储其数据库的卷
docker volume create portainer_data
# 下载并安装 Portainer Server 容器, 9000为WebUI端口, 8000 是可选的,仅当您计划将边缘计算功能与边缘代理一起使用时才需要。
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /portainer_data:/data portainer/portainer-ce:2.11.1
注意端口映射时:
2333:8000
为 容器内部端口
8000
,宿主机端口为
2333
WebUI访问
http://localhost:9000
# docker在服务器上时,可以关闭防火墙访问,也可以ssh代理到本地
brainiac1# ufw status
Status: inactive
http://222.195.72.218:9000/#!/home
建议使用 Stacks 下的 docker-compose部署docker
# 安裝 docker
curl -sSL get.docker.com | sh
# 將目前使用者新增到 docker 群組內,需要重新登入才會生效
sudo usermod -aG docker $USER
# 安裝 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -sL https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d'"' -f 4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
cheat sheet
docker build
编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像;
Dockfile 基本的格式为
docker build [ 选项 ] 路径
,该命令将读取指定路径下(包括子目录)的 Dockerfile,并将该路径下所有内容发送给 Docker 服务端,由服务端来创建镜像。
因此一般建议放置 Dockerfile 的目录为空目录。也可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略路径下的目录和文件。
-t
:指定要创建的目标镜像名
镜像的完整 tag 不仅包含镜像名字, 还指明了镜像从哪里来, 要到哪里去, 就像一个 URL。可以通过 -t 选项指定镜像的标签信息,譬如:
$ sudo docker build -t myrepo/myapp /tmp/test1/
$ docker build -t username/image_name:tag_name .
$ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker run
docker run :创建一个新的容器并运行一个命令
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
-e username="ritchie": 设置环境变量;
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
dockfile在当前目录
#!/bin/bash
docker_name="mihoyo-bbs"
docker stop ${docker_name}
docker rm ${docker_name}
echo -e "\033[5;36mOrz 旧容器(镜像)已清理\033[0m"
time_now=$(date "+%m%d%H")
docker build -f dockerfile --tag ${docker_name}:"${time_now}" .
echo -e "\033[5;36mOrz 镜像重建完成\033[0m"
docker run -itd \
--name ${docker_name} \
--log-opt max-size=1m \
-v $(pwd):/var/app \
${docker_name}:"${time_now}"
echo -e "\033[5;36mOrz 镜像启动完成\033[0m"
docker ps -a #顯示目前的 container 及狀態
docker logs ${docker_name} -f # -f, --follow Follow log output
hackergame2020 的源码的dockerfile
Ithemal
docker-compose
Compose 是用于定义和运行多容器 Docker 应用程序的工具。需要额外安装。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
https://www.runoob.com/docker/docker-compose.html
例子:AutoMihoyoBBS
https://github.com/Womsxd/AutoMihoyoBBS
version: "3"
services:
mihoyo-bbs:
image: darkatse/mihoyo-bbs
environment:
- CRON_SIGNIN=30 9 * * *
- MULTI=TRUE
volumes: # 将主机的数据卷或着文件挂载到容器里。
- .:/var/app
logging: # driver:指定服务容器的日志记录驱动程序,默认值为json-file
driver: "json-file"
options:
max-size: "1m" # 最多1m个文件,当达到文件限制上限,会自动删除旧得文件。
docker-compose logs -f
命令来查看程序输出。 -f, --follow Follow log output
$ docker-compose up -d
# 执行 docker-compose up 命令来启动并运行整个应用程序。
# 在后台执行该服务可以加上 -d 参数
Creating network "automihoyobbs_default" with the default driver
Pulling mihoyo-bbs (darkatse/mihoyo-bbs:)...
latest: Pulling from darkatse/mihoyo-bbs
df9b9388f04a: Pull complete
a1ef3e6b7a02: Pull complete
7a687728470e: Pull complete
4ecf30de1710: Pull complete
a1f99e431609: Pull complete
7e9141a60a66: Pull complete
7aa39aec04ec: Pull complete
a75b4b3d5690: Pull complete
dee0a6b07871: Pull complete
abed80702fed: Pull complete
Digest: sha256:10958801df87675c390a8cdcc153c2f87a41af92d35f9f2cf9b7758aa3e10d1b
Status: Downloaded newer image for darkatse/mihoyo-bbs:latest
Creating automihoyobbs_mihoyo-bbs_1 ... done
docker build use proxy
https://cloud.tencent.com/developer/article/1806455
http://www.debugself.com/2018/01/17/docker_network/
docker build --network=host\
--build-arg http_proxy=http://127.0.0.1:7890 \
--build-arg https_proxy=http://127.0.0.1:7890 \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t ithemal:latest .
You also can set the proxy in the Dockerfile.
ENV http_proxy "http://127.0.0.1:7890"
ENV https_proxy "https://127.0.0.1:7890"
启动docker并通过xhost保持tmux连接
docker/docker_connect.sh
https://blog.csdn.net/winter2121/article/details/118223637
Got permission denied while trying to connect to the Docker daemon socket
sudo 运行
加入docker用户组
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
docker ps #测试docker命令是否可以使用sudo正常使用
sudo password in docker image
https://stackoverflow.com/questions/28721699/root-password-inside-a-docker-container
https://www.zhangshengrong.com/p/AvN6YAOWam/
https://blog.csdn.net/xzl9811wl/article/details/107060382
需要进一步的研究学习
遇到的问题
开题缘由、总结、反思、吐槽~~
https://cloud.tencent.com/developer/article/1395434
Got permission denied while trying to connect to the Docker daemon socket
sudo password in docker image
需要进一步的研究学习
遇到的问题
开题缘由、总结、反思、吐槽~~