docker
docker服务器
- 介绍如何在ubuntu环境下创建docker容器,并且将此容器设置成一个“服务器”
- 然后如何ssh进docker容器(root用户),并且配置免密登录
步骤如下
1.创建Dockerfile文件
1 | |
2.执行命令创建镜像
1 | |
将mydocker换成你想要的镜像名称
3.利用镜像创建容器
1 | |
将mydocker-container换成你自己的容器名称,mydocker是镜像名称
此时容器已经创建成功,可以进入容器查看
1 | |
4.配置并开启docker容器的ssh服务
(a)确保 SSH 服务已经在容器内安装并正在运行。
可以使用以下命令来安装并启动 SSH 服务:
1 | |
如果 service ssh start 不工作,您也可以尝试:
1 | |
或者直接使用 systemctl(如果您的容器支持 systemd):
1 | |
(b)设置 root 用户的密码。
你需要使用 passwd 命令来为 root 用户设置密码:
1 | |
当系统提示时输入并确认密码。
(d)配置 SSH 以允许 root 用户登录。
编辑容器中的 /etc/ssh/sshd_config 文件,将 PermitRootLogin 的值更改为 yes:
1 | |
(e)重新启动 SSH 服务以使更改生效:
1 | |
(f)使用 SSH 连接到容器:
现在您应该可以使用 SSH 连接到容器的 root 用户了。使用宿主机的端口 20000 来连接:
1 | |
到此为止,docker容器的ssh已经完全配置好了
5.配置免密登录
以下是在Windows系统使用Git Bash来完成这个过程的详细步骤
(a)生成SSH密钥对
打开git bash,输入命令生成密钥对,一路回车,密钥对在 /c/Users/<你的用户名>/.ssh/id_rsa文件中
1 | |
(b)复制SSH公钥到远程服务器
本地git bash中查看公钥内容,复制下来
1 | |
然后登录远程主机 (端口号20000,这是映射的端口)
1 | |
登录到远程服务器后,执行以下命令来编辑(或创建)authorized_keys文件:
1 | |
将复制的公钥粘贴进文件
1 | |
(c)退出后,即可进行免密登录
docker网络
常用命令
(1)查看网络帮助
1 | |
1 | |
(2)查看容器信息
1 | |
(3)查看容器详细信息
1 | |
常用的网络模式
(1)bridge模式(默认)
Docker的默认模式,它会在docker容器启动时候,自动配置好自己的网络信息,同一宿主机的所有容器都在一个网络下,彼此间可以通信。利用宿主机的网卡进行通信,因为涉及到网络转换,所以会造成资源消耗,网络效率会低。
(2)host模式
容器使用宿主机的ip地址进行通信。特点:容器和宿主机共享网络
(3)container模式
新创建的容器间使用,使用已创建的容器网络,类似一个局域网。 特点:容器和容器共享网络
(4)none模式
这种模式最纯粹,不会帮你做任何网络的配置,可以最大限度的定制化。 不提供网络服务,容器启动后无网络连接。
(5)overlay模式
容器彼此不在同一网络,而且能互相通行。
dockerfile(构建镜像)
- 基础镜像:从一个已存在的镜像开始构建新镜像(例如
FROM ubuntu:18.04)。 - 维护者信息:镜像创建者的信息(例如
MAINTAINER)。 - 环境配置:设置环境变量(例如
ENV)。 - 安装软件:使用包管理器安装所需软件(例如
RUN apt-get install -y nginx)。 - 添加文件/目录:将本地文件或目录添加到镜像中(例如
ADD或COPY)。 - 配置工作目录:设置工作目录的路径(例如
WORKDIR /app)。 - 配置启动命令:设置容器启动时执行的命令(例如
CMD ["nginx", "-g", "daemon off;"])。 - 端口暴露:声明容器运行时监听的端口(例如
EXPOSE 80)。
构建命令
1 | |
多阶段构建
example:
1 | |
创建并启动容器
1 | |
查看日志
1 | |
docker-compose(创建容器)
概念
服务(Services)
- image:指定服务使用的镜像。
- build:指定一个目录的路径,该目录中包含了一个Dockerfile,Docker Compose将用它来构建镜像。
- command:覆盖容器启动后默认执行的命令。
- environment:设置环境变量。
- volumes:挂载卷。
- ports:端口映射。
- depends_on:设置服务间的依赖关系。
- networks:指定网络设置。
卷(Volumes)
- 定义用于数据持久化或共享数据的卷。
网络(Networks)
- 定义容器间如何相互通信的网络。
build & image 都是指定镜像
常用命令
docker compose命令(Docker CLI的一部分)
需要在docker-compose.yml目录下运行
启动服务:
1
docker compose up1
docker compose up -d #停止删除服务:
1
docker compose down停止服务
1
docker compose stop构建或重建服务:
1
docker compose build查看运行中的服务:
1
docker compose ps查看服务的日志:
1
docker compose logs执行一个服务容器中的命令:
1
docker compose exec service_name command
1 | |
技巧
创建一个容器用于调试
1 | |
可进行的配置
- 内存限制
- 网络
- 数据卷