仓库→镜像(ubuntu)→容器(其实就是镜像的实例)

1.安装Docker

基于CentOS7系统安装

1
2
3
sudo yum install docker
//如果不可以的话,请查看下边链接
https://docs.docker.com/engine/installation/linux/ubuntulinux/

查看Docker版本

1
docker version

运行Docker deamon

1
sudo service docker start

默认开机启动

1
sudo chkconfig docker on

下载镜像

1
sudo docker pull ubuntu

查看镜像是否存在

1
sudo docker images ubuntu

查看编译好的镜像

1
sudo docker images

查看正在运行的容器

1
2
3
sudo docker ps
sudo docker ps -l
sudo docker ps -a

容器详细信息

1
sudo docker inspect efe   //efe是id的前三位

容器的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 删除所有容器  
$docker rm $(docker ps -a -q)

# 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container
$docker rm Name/ID

# 停止、启动、杀死一个容器
$docker stop Name/ID
$docker start Name/ID
$docker kill Name/ID

# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
$docker logs Name/ID

# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
$docker diff Name/ID

# 显示一个运行的容器里面的进程信息
$docker top Name/ID

# 从容器里面拷贝文件/目录到本地一个路径
$docker cp Name:/container_path to_path
$docker cp ID:/container_path to_path

# 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
$docker restart Name/ID

# 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
$docker attach ID

进入到已存在的容器的bash控制台

在此之前必须启动容器,之后才能进入

1
$docker restart Name/ID

进入方法

1
2
3
4
//平时进入容器都用这个命令
docker exec -it ID /bin/bash
//attach退出的话容器也会停止
docker attach ID

运行镜像-创建容器并进入bash控制台

每次进入容器就可以,如果每次都运行镜像的话每次都会增加一个容器

1
2
sudo docker run -i -t ubuntu /bin/bash
sudo docker run -i -t ubuntu /bin/echo hello //错误

参数解释
-t:开启一个终端
-i:以交互模式运行

安装新程序(安装node)

1
docker run ubuntu apt-get install -y node

在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。

保存修改

1
docker commit 698 pengweb/u-node //起个新名字
1
docker ps -l

获得id,只取前3位698就够了

发布自己的镜像

1
2
docker login
docker push pengweb/u-node

删除镜像-必须停止所有的容器

1
2
3
4
5
6
7
8
9
10
//停止所有container
docker stop $(docker ps -a -q)
//删除所有container
docker rm $(docker ps -a -q)
//删除images,通过image的id来指定删除谁
docker rmi <image id>
//删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
//要删除全部image的话
docker rmi $(docker images -q)

Dockerfile构建镜像

参数说明

1
2
3
4
5
6
7
8
9
FROM <image>:<tag>    #指定基础镜像
MAINTAINER <name> #指定镜像创建者信息
RUN #安装软件
CMD #设置container启动时执行的操作
ENTRYPOINT #设置container启动时执行的操作
USER #设置container容器的用户
EXPOSE #指定容器需要映射到宿主机器的端口
ENV #用于设置环境变量
# 更多请点击底部参考网址4

构建方法

1
2
3
docker build -t 文件夹名a .    
#注意a后边有个点,表示文件夹名为a下的Dockerfile文件
#-t参数指定镜像名称和tag -可不填

docker compose构建

命令参考

启动服务

1
docker-compose up -d

映射主机端口

docker指令:

1
2
3
4
5
6
docker run -p ip:hostPort:containerPort redis
例如:
$ docker run -it -p 3000:3000 next
访问的时候访问:
http://192.168.99.100:3000/
192.168.99.100是打开控制台分发的一个地址

使用-p参数会分配宿主机的端口映射到虚拟机。
IP表示主机的IP地址。
hostPort表示宿主机的端口。
containerPort表示虚拟机的端口。

支持的格式有三种:

ip:hostPort:containerPort:映射指定地址的指定端口到虚拟机的指定端口(不常用)
如:127.0.0.1:3306:3306,映射本机的3306端口到虚拟机的3306端口。
ip::containerPort:映射指定地址的任意端口到虚拟机的指定端口。(不常用)
如:127.0.0.1::3306,映射本机的3306端口到虚拟机的3306端口。
hostPort:containerPort:映射本机的指定端口到虚拟机的指定端口。(常用)
如:3306:3306,映射本机的3306端口到虚拟机的3306端口。

相应的运行容器使用的命令

1
2
3
4
5
6
7
8
9
-d 以守护进程运行(守护进程其实就是进入bash后执行)
-p 绑定的端口
-v 绑定的目录

docker run -it -d -p 9010:9000 tentou/node
docker run -it -d -p 9010:9000 -v /www:/www a7322cfb6259
docker run -it -d -p 8090:80 -v /www:/usr/share/nginx/html d53bfcc6255e
docker run -it -d -p 8090:80 -p 3222:22 -v /www:/usr/share/nginx/html d53bfcc6255e /user/sbin/sshd -D
docker run -it -d -p 8301:3306 -v /opt/dockerData/mysql:/var/lib/mysql efa2dae55c8b mysqld

查看容器IP地址

1
docker inspect --format='{{.NetworkSettings.IPAddress}}' ID

查看宿主机的IP地址

如果容器IP地址是172.17.0.2的话
那给主机分配的IP就是172.17.0.1了

docker内系统修改用户名密码

1
2
apt install passwd //安装passwd软件
//执行passwd命令,修改root用户密码

启动容器的SSHd

1
2
3
4
5
6
7
8
9
10
apt-get install openssh-server openssh-client ssh
mkdir /var/run/sshd //这sshd是一个目录
#ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
#ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

此时会报错:ssh: connect to host localhost port 22: Connection refused

#/usr/sbin/sshd //启动sshd就好了

#service ssh restart //重启sshd

如果出现Permission denied, please try again.
重设一下密码

1
2
3
passwd
//然后再登陆试试
ssh localhost

SSH测试链接其他容器

1
ssh root@172.17.0.2

将docker的公钥放到要访问他的主机的authorized_keys中

1
cat id_rsa.pub>>authorized_keys

容器间互相通信

参考文章1
参考文章2
参考文章3
参考文章4

2.安装Node

通过apt安装的版本太低!

1
apt-get install nodejs

2.1 安装git

1
apt-get install git

2.2 安装nvm或者n来管理node版本

只介绍安装nvm

2.2.1 安装curl

1
apt-get install curl

2.2.2 安装nvm并关联第三方node源

1
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

2.2.3 找不到命令的话

1
command -v nvm

关闭控制台然后重试

2.3 用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nvm install <version>  ## 为node的话安装最新版本。安装指定版本,可模糊安装,如:安装v4.4.0,既可nvm install v4.4.0,又可nvm install 4.4

nvm uninstall <version> ## 删除已安装的指定版本,语法与install类似

nvm use <version> ## 切换使用指定的版本node

nvm ls ## 列出所有安装的版本

nvm ls-remote ## 列出所以远程服务器的版本(官方node version list)

nvm current ## 显示当前的版本

nvm alias <name> <version> ## 给不同的版本号添加别名

nvm unalias <name> ## 删除已定义的别名

nvm reinstall-packages <version> ## 在当前版本node环境下,重新全局安装指定版本号的npm包

集群管理

整个Docker集群的管理,业界有很多成熟的解决方案,例如MesosKubernetesDocker Swarm
这些集群系统提供了调度,服务发现,负载均衡等功能,让整个集群变成一个整体。

安装gitlab

登陆

用户名:root

进入后的name是Administrator

安装jenkins

1.下载

jenkins镜像

2.运行

点start直接

3.访问

找到Kitematic里这个容器的配置里,看里边的端口
localhost:32773 这个是本地访问的路径

4.解锁

控制台输入

1
docker logs 容器ID

这里就会打印出密钥

5.关闭

http://localhost:32781/exit

6.重启

http://localhost:32781/restart

7.插件

Git plugin

8.配置节点-发布到多服务器

重中之重就是SSH要连通,在Docker学习笔记里有写
查看node服务器ip用

1
ip addr

9.构建触发器

选Poll SCM

1
H/5 * * * *

10.构建和节点联系起来

勾选Restrict where this project can be run
并且在Label Expression输入奴隶节点的标签名

图示







安装Sinopia

1.管理代理工具nrm

1
npm install -g nrm

2.添加代理

1
nrm add local http://localhost:32774/

3.查看所有代理

1
nrm ls

4.切换代理

1
nrm use local

5.添加注册账号

1
npm adduser

6.登陆npm

1
npm login

7.发布包

1
npm publish

8.移除包

1
npm unpublish <package>@<version>
← Prev Next →