0%

创建容器

数据容器:仅用来存储和管理数据的容器。

被宿主机管理,但是用docker ps命令不会显示。

首先给容器起个通用的名字。然后使用busybox作为基础,因为busybox很小很轻量,在宿主机间访问和移动很方便。

-v 选项用来定义这个容器的哪个位置允许其他容器读取写入数据。

比如创建一个存储配置文件的容器

1
docker create -v /config --name dataContainer busybox

复制文件

可以从当前目录向这个容器内复制文件,使用命令:docker cp

1
2
# 把config.conf文件复制到dataContainer容器的config路径
docker cp config.conf dataContainer:/config/

挂载卷

数据容器里已经有我们的config.conf文件了。在运行其他独立的容器时,可以关联这个容器获取文件。

使用*–volumes-from *,可以在其他容器加载的的时候挂载卷。下面的这个例子会启动一个ubuntu容器并关联到数据容器,当列出config文件夹内容时,可以看到数据容器的文件内容。

1
docker run --volumes-from dataContainer ubuntu ls /config

如果容器*/config*目录已经存在的话,volumes-from的路径会覆盖并被使用。

可以同时使用多个文件夹。

导入/导出 容器

如果想把数据容器移动到其他的机器上,可以把容器导出成 .tar 文件

1
docker export dataContainer > dataContainer.tar

下面的命令可以把 .tar 文件作为数据容器 导入回docker

1
docker import dataContainer.tar

Docker Ignore

1
2
3
4
# 要忽略passwords.txt 文件
echo passwords.txt >> .dockerignore
docker build -t nopassword .
docker run nopassword ls /app

OnBuild

1
2
3
4
5
6
7
FROM node:7
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ONBUILD COPY package.json /usr/src/app/
ONBUILD RUN npm install
ONBUILD COPY . /usr/src/app
CMD [ "npm", "start" ]

基础镜像 安装并启动node

1
2
3
4
5
6
7
8
9
10
11
12
13
# 基础镜像
FROM node:10-alpine
RUN mkdir -p /src/app
WORKDIR /src/app

# npm install
COPY package.json /src/app/package.json
RUN npm install

# Configuring Application
COPY . /src/app
EXPOSE 3000
CMD [ "npm", "start" ]

构建

1
2
docker build -t my-nodejs-app .
docker run -d --name my-running-app -p 3000:3000 my-nodejs-app

新建Dockerfile

1
2
3
4
5
6
7
8
9
10
11
# 基础镜像
FROM nginx:1.11-alpine

# 复制文件
COPY index.html /usr/share/nginx/html/index.html

# 暴露端口 例子:EXPOSE 80 433 or EXPOSE 7000-8000
EXPOSE 80

# 执行命令 (nginx -g daemon off;)
CMD ["nginx", "-g", "daemon off;"]

构建镜像

1
2
# 构建
docker build -t my-nginx-image:latest .

启动容器

1
docker run -d -p 80:80 my-nginx-image:latest

新建Dockerfile

1
2
FROM nginx:alpine
COPY . /usr/share/nginx/html

Build docker 镜像

1
2
3
4
5
# 根据Dockerfile构建镜像
docker build -t webserver-image:v1 .

# 查看镜像
docker images

运行

1
docker run -d -p 80:80 webserver-image:v1

运行容器

可以在registry.hub.docker.com/或者通过以下语句找到各种镜像

1
docker search <name>

运行容器,需要使用,-d代表后台运行

1
docker run -d redis:3.2

查找运行中的容器

1
2
3
4
5
6
7
8
# 列表
docker ps

# provides more details about a running container, such as IP address.
docker inspect <friendly-name|container-id>

# display messages the container has written to standard error or standard out.
docker logs <friendly-name|container-id>

访问redis

1
2
3
4
5
6
7
8
9
10
11
# 指定host的端口
docker run -d --name redisHostPort -p 6379:6379 redis:latest

# 动态的host端口
docker run -d --name redisDynamic -p 6379 redis:latest

# 查看容器端口所对应的host端口
docker port redisDynamic 6379

# 或者通过docker ps的列表返回也可以看到host的端口
docker ps

数据持久化

1
2
# 官方的redis镜像将log和data数据存储在/data目录,所以这里需要映射一下/data
docker run -d --name redisMapped -v /opt/docker/data/redis:/data redis

前台运行容器

1
2
3
4
5
# 启动ubuntu容器,并进行ps操作
docker run ubuntu ps

# 启动ubuntu容器,并进入bash交互
docker run -it ubuntu bash

偶然发现一个好网站,上面有docker的在线实践,类似与国内实验楼的虚拟环境。课程做的很好,循序渐进。暂时还没发现是否收费。

这里是网址 https://www.katacoda.com 。作者是Ben Hall。

我顺便把实践的过程记录下来,尽量每一步都通过centos验证。

docker实践01:发布第一个docker容器

docker实践02:发布静态html网站容器

docker实践03:构建容器镜像

docker实践04:构建nodejs容器

docker实践05:使用OnBuild优化Dockerfile

docker实践06:忽略文件

docker实践07:数据容器

docker实践08:容器间通信-Links方式

docker实践09:容器间通信-Networks方式

docker实践10:使用Volumes持久化数据

docker实践11:管理Log文件

docker实践12:使用重启策略保持可用

插入模式

进入插入模式

按键 功能
i 小 当前位置落光标
I 大 行首落光标
a 小 当前位置后面落光标
A 大 行尾落光标
o 小 向下新起一行落光标
O 大 向上加一行落光标
gi 跳转到最后一次编辑的地方,并进入编辑模式

插入模式删除

按键 功能
ctrl + h 删除前一个字符
ctrl + w 删除一个单词
ctrl + u 删除一行

命令行模式

命令 功能
:vs 垂直左右分屏
:sp
:set nu 行号
:% s/foo/bar/g 全局替换
:syntax on 高亮
:set hls 搜索结果高亮
:set incsearch 增量搜索,边搜索边高亮

Visual可视模式(v)

命令 功能
v 小 单个字符
V 大 整行
ctrl + v 块状选择

normal模式

移动

命令 功能
w 小 移动到下一个word开头(不含空格)
W 大 移动到下一个word开头(含空格)
e 小 移动到下一个word结尾(不含空格)
E 大 移动到下一个word结尾(含空格)
b 小 移动到上一个word开头(不含空格)
B 大 移动到上一个word开头(含空格)

编辑

命令 功能
u 撤回操作

删除

命令 功能
x 删除一个字符
4x 删除4个字符
dw 删除一个单词
daw 删除一个单词包含周围的空格 delete around word
diw 删除一个单词
dd 删除当前行
dt{char} 删除到{char}
d0 删除到行首
d$ 删除到行尾
2dd 删除2行

修改

命令 功能
r 小 replace 替换
R 大 覆盖 替换
s 小 删除当前字符并进入插入模式
S 大 删除当前行并进入插入模式
4s 删除4个字符并进入插入模式
caw 删除一个单词并进入插入模式
C 大 删除整行并进入插入模式
ct{char} 删除到{char}并进入插入模式

查询

命令 功能
/ 向下查询
? 向上查询
n 下一个匹配
N 上一个匹配
* 光标所在单词的下一个匹配
# 光标所在单词的上一个匹配

同行搜索

命令 功能
f{char} 移动到char字符上
t{char} 移动到char的前一个字符上
; 向下一个搜索
, 向上一个搜索
F 向前搜索

同行移动

命令 功能
0 行首第一个字符
^ 第一个非空白字符
$ 行尾
g_ 行尾非空白

垂直移动

命令 功能
( ) 句子间移动
{ } 段落间移动
gg 文件开头
G 文件结尾
ctrl + o 快速返回
H 屏幕开头
M 屏幕中间
L 屏幕结尾
ctrl + u 上翻页
ctrl + f 下翻页
zz 屏幕置为中间

序言

购买云服务器后需要配置一下初始的安全设置,主要作用是修改22的ssh端口,并限定ssh用户登录。

记录分享一下。

设置

添加ssh用户

1
2
useradd sshuser #添加ssh用户,用户名sshuser
passwd sshuser #修改sshuser密码

修改ssh端口

修改sshd配置文件

1
vim /etc/ssh/sshd_config
1
2
#Port 22 #默认配置端口,注释状态
Port 220 #修改成220

配置ssh用户可以使用ssh

1
vim /etc/ssh/sshd_config
1
AllowUser sshuser #添加ssh登录权限
1
systemctl restart sshd.service # 重启ssh

给ssh用户设置sudo权限

1
2
gpasswd -a sshuser wheel
# lid -g wheel #查询所有带sudo权限的用户

禁用root用户登录ssh

1
vim /etc/ssh/sshd_config
1
PermitRootLogin no
1
systemctl restart sshd.service # 重启ssh