仓库→镜像(ubuntu)→容器(其实就是镜像的实例)
1.安装Docker 基于CentOS7系统安装1 2 3 sudo yum install docker //如果不可以的话,请查看下边链接 https://docs.docker.com/engine/installation/linux/ubuntulinux/
查看Docker版本
运行Docker deamon 1 sudo service docker start
默认开机启动 1 sudo chkconfig docker on
下载镜像
查看镜像是否存在 1 sudo docker images ubuntu
查看编译好的镜像
查看正在运行的容器 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 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 //起个新名字
获得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构建 命令参考
启动服务
映射主机端口 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测试链接其他容器
将docker的公钥放到要访问他的主机的authorized_keys中 1 cat id_rsa.pub>>authorized_keys
容器间互相通信 参考文章1 参考文章2 参考文章3 参考文章4
2.安装Node 通过apt安装的版本太低!
2.1 安装git
2.2 安装nvm或者n来管理node版本 只介绍安装nvm
2.2.1 安装curl
2.2.2 安装nvm并关联第三方node源 1 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
2.2.3 找不到命令的话
关闭控制台然后重试
2.3 用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 nvm install <version> nvm uninstall <version> nvm use <version> nvm ls nvm ls-remote nvm current nvm alias <name> <version> nvm unalias <name> nvm reinstall-packages <version>
集群管理 整个Docker集群的管理,业界有很多成熟的解决方案,例如Mesos ,Kubernetes 与Docker Swarm 。 这些集群系统提供了调度,服务发现,负载均衡等功能,让整个集群变成一个整体。
安装gitlab 登陆 用户名:root
进入后的name是Administrator
安装jenkins 1.下载 jenkins镜像
2.运行 点start直接
3.访问 找到Kitematic里这个容器的配置里,看里边的端口 localhost:32773 这个是本地访问的路径
4.解锁 控制台输入
这里就会打印出密钥
5.关闭 http://localhost:32781/exit
6.重启 http://localhost:32781/restart
7.插件 Git plugin
8.配置节点-发布到多服务器 重中之重就是SSH要连通,在Docker学习笔记里有写 查看node服务器ip用
9.构建触发器 选Poll SCM
10.构建和节点联系起来 勾选Restrict where this project can be run 并且在Label Expression输入奴隶节点的标签名
图示
安装Sinopia 1.管理代理工具nrm
2.添加代理 1 nrm add local http://localhost:32774/
3.查看所有代理
4.切换代理
5.添加注册账号
6.登陆npm
7.发布包
8.移除包 1 npm unpublish <package>@<version>