Docker 基础 - 2
容器操作系统类型
Busybox
集成了一百多个最常用 Linux 命令和工具的软件工具箱.
包含cat echo grep find mount telnet 等
Busybox 是Linux 系统的瑞士军刀
Debian/Ubuntu
CentOS/Fedora
CoreOS
Linux发行版, 针对容器技术.
创建自定义操作系统的镜像
基于commit 命令创建
支持用户提交自己对容器的修改, 并生成新的镜像. 命令格式为:
docker commit CONTAINER [REPOSITORY[:TAG]]
创建步骤
使用OS镜像创建容器
配置软件源为国内软件源, 如 ali
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
执行
apt-get update更新软件包缓存通过
apt-get安装服务(比如安装 ssh):apt-get install openssh-server创建目录:需要目录
/var/run/sshd存在, 手动创建:mkdir -p /var/run/sshd. 此时已经可以启动服务:/usr/sbin/sshd -D &修改服务配置, 取消pam登陆限制:
sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd其他操作:在 root 用户目录下创建
.ssh目录, 并复制需要登陆的公钥信息(1. 直接从用户目录下的 .ssh/id_rsa.pub 文件拷贝 2.ssh-keygen -t rsa生成)到authorized_keys中:mkdir -p /root/.ssh && vi /root/.ssh/authorized_keys. 公钥信息格式示例如下:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtuqN2zGhhVBTVCCoNa8hPvGu3xo8+UsqG+AxW0jEUvQYhr6/IEXiIAk41HzjeEZVYKGGr08Jh8n5xxmBW4AyH/1DaU1Ej3m0dOuZ09HAUJfY7WnrtO8GrZtQT2KhI6P2pwnOJU3fm6eRLLVzL2oSyhBQ8ca/njwAyHXOVJiPOpO3cokOPa2BzziWqslmFKyWQdaf6rBwYKF+2eoFrVk0QepoJtc6OfgIyuQEi+gJXste6QiPJRYgFQoYlv/bzYnnrG7Zs0qVCi6SfIRF7twVXUNW/hkPbGxsKZTLAvITS3tOR2nRt6pibT46RM/+ebiuT0fZ/e/xl3w4QygGTB2Xl casey@ubuntu
其他步骤:创建自动启动的 SSH 服务的可执行文件
run.sh, 并添加可执行权限:vi /run.sh; chmod +x run.sh#!/bin/bash
/usr/sbin/sshd -D
最后, 退出容器
exit
保存镜像
sudo docker commit <container id> ubuntu-sshd
启动镜像
sudo docker run -p 10122:22 -d ubuntu /run.sh
使用
可以通过 ssh 服务进行连接
ssh <container ip> -p 10122 -l root
使用 Dockerfile 创建(重点关注)
Dockerfile示例
## OS镜像
FROM ubuntu:16.04
## 维护者
LABEL maintainer="CaseyCui cuikaidong@foxmail.com"
## 1. 备份官方源
## 2. 创建/var/run/sshd文件夹(正常启动SSH服务需要)
## 3. 创建root用户目录下.ssh目录
RUN mv /etc/apt/sources.list /etc/apt/sources.list.default \
&& mkdir -p /var/run/sshd \
&& mkdir -p /root/.ssh
## 拷贝阿里镜像源信息到/etc/apt/sources.list
COPY sources.list /etc/apt/sources.list
## 拷贝公钥到/root/.ssh目录
COPY authorized_keys /root/.ssh/authorized_keys
## 拷贝运行脚本run-sshd.sh到根目录下
COPY run-sshd.sh /run-sshd.sh
## 1. 安装openssh-server
## 2. 修改时区为**中国/上海**(ubuntu新版本需要安装 *tzdata*,通过**链接**方式使之生效)
## 3. 修改SSH服务的安全登录配置,取消pam登录限制
## 4. run-sshd.sh增加执行权限
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
openssh-server \
tzdata \
&& rm -rf /var/lib/apt/lists/* \
&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& dpkg-reconfigure -f noninteractive tzdata \
&& sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd \
&& chmod +x /run-sshd.sh
## 开放端口
EXPOSE 22
## 增加挂载点/tmp
VOLUME /tmp
## 设置启动命令
CMD ["/run-sshd.sh"]
自动化修改时区
ubuntu 16.04 之前:
echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdataubuntu 16.04 及之后:
&& ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata前提: 需要安装 tzdata 包:
apt-get -yq install tzdata
ENV 环境变量ENV环境变量全局生效, 有时可能会有负面效果.
如:
ENV DEBIAN_FRONTEND noninteractive会把所有操作设置为非交互式的.尽量不要像上边那样使用, 建议的用法是: 在有需要时, 和执行的命令一起执行, 如:
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends tzdata # -q: quiet
.dockerignore文件
## 忽略文件夹 .git/
.git
## 忽略临时文件
*.swp
run.sh 脚本
##!/bin/bash
/usr/sbin/sshd -D
创建镜像
在 Dockerfile 目录下执行:
sudo docker build -t caseycui/ubuntu-sshd .
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Docker 基础 - 2的更多相关文章
- Docker - Docker基础命令及使用
Docker Docker - 官网 Docker - Hub GitHub - Docker Docker中文社区 Docker基础命令 Docker 查看帮助信息:docker --help 查看 ...
- 【云计算】Docker云平台—Docker基础
Docker云平台系列共三讲,此为第一讲:Docker基础 参考资料: Docker官方文档:https://docs.docker.com/ Docker从入门到实践:https://yeasy.g ...
- Docker基础技术:Linux Namespace(下)
在 Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中,主 ...
- Docker 基础技术:Linux Namespace(下)
导读 在Docker基础技术:Linux Namespace(上篇)中我们了解了,UTD.IPC.PID.Mount 四个namespace,我们模仿Docker做了一个相当相当山寨的镜像.在这一篇中 ...
- Docker基础入门及示例
Docker近几年的发展可谓一日千里,特别从是2013年随着一个基于LXC的高级容器引擎开源,到现在,其在linux和windows上都有了很好的支持,并且已经有很多公司将docker用于实际的生产环 ...
- Docker 基础 : 镜像
目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...
- Docker 基础技术之 Linux cgroups 详解
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇 ...
- docker 基础知识分享ppt
给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx
- 中标麒麟龙芯平台--docker基础镜像制作
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...
- Docker系列03—Docker 基础入门
本文收录在容器技术学习系列文章总目录 1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. ...
随机推荐
- goroutine&waitgroup下载文件
0.1.索引 https://blog.waterflow.link/articles/1663078266267 当我们下载一个大文件的时候,会因为下载时间太久而超时或者出错.那么我么我们可以利用g ...
- 创建base公共组件
公共模块 基础模块参照了vant的思路,使用bem命名规范.先创建一个命名空间,这个命名空间返回创建组件函数与生成命名方法.在创建组件函数中创建name与install属性用于注册vue组件 创建组件 ...
- 在ubuntu 上安装golang
https://golang.google.cn/dl/ 方式一 下载安装包 wget https://golang.google.cn/dl/go1.19.linux-amd64.tar.gz 解压 ...
- Oracle数据库允许最大连接数
1.查看当前的数据库连接数 SQL> select count(*) from v$process ; 2.数据库允许的最大连接数 SQL> select value from v$par ...
- pinpoint部署
pinpoint是一个分析大型分布式系统的平台,提供解决方案来处理海量跟踪数据,主要面向基于tomcat的Java 应用. pinpoint使用HBASE储存数据. 下面介绍pinpoint部署及应用 ...
- Springboot结构梳理
springboot各层关系梳理 1.基本流程 View层-->Controller层(响应用户请求):导入 service层,调用你service方法,controller通过接受前端传来的参 ...
- ValidList
package com.dlzb.enterprising.config; import javax.validation.Valid; import java.util.*; public clas ...
- 如何避免由 Web 字体引起的布局偏移
前言 一些布局上的完全加载前后的变化很容易解决:为动态元素预先分配正确的空间,在图像上使用宽度和高度属性,并优先考虑 HTML 文档中的可见元素.但是,导致布局偏移的还有一个难以解决的问题:无样式文本 ...
- python列表、元祖
#列表创建1 a=['李刚','李白','王维','苏轼','李商隐','苏洵','王安石','司马光'] #列表创建2 b=list(['李刚','李白','王维','苏轼','李商隐','苏洵', ...
- day01-Tomcat框架分析
引入课程和Maven 1.Maven maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven仓库是国外的 ...