docker开发

docker运行

docker的安装

1
一个大写的略过

docker 登陆

1
sudo docker login --username=xxxxx@qq.com registry.cn-hangzhou.aliyuncs.com

docker自动构建gitHub项目(阿里云为例子)

  1. 先github或者阿里云git创建项目:以下为例子

  2. 进入阿里云开发者;登陆,创建我的镜像进入我的镜像仓库

  3. 选择创建镜像仓库

  4. 这里会要求建立一个密码,用于登陆docker使用,这里会先以账户名建立一个namespace。

  5. 下面选择阿里云Code创建,构建设置可以设置:代码自动构建,不使用缓存

    1
    自动构建是在代码有变动的时候会重新编译镜像。
  6. 使用代码构件,最顶层要有一个Dockerfile文件,会按照该文件进行构件

  7. 进入详细信息,里面就会列举下载地址,包括如下下载,并且重新发布

配置固定的ip

第一步:安装最新版的Docker
备注:操作系统自带的docker的版本太低,不支持静态IP,因此需要自定义安装。
root@localhost:# apt-get update
root@localhost:
# apt-get install curl
root@localhost:# curl -fsSL https://get.docker.com/ | sh
root@localhost:
# docker -v
Docker version 1.10.3, build 20f81dd

第二步:创建自定义网络
备注:这里选取了172.18.0.0网段,也可以指定其他任意空闲的网段
docker network create –subnet=172.18.0.0/16 shadownet
注:shadown为自定义网桥的名字,可自己任意取名。

第三步:在你自定义的网段选取任意IP地址作为你要启动的container的静态IP地址
备注:这里在第二步中创建的网段中选取了172.18.0.10作为静态IP地址。这里以启动shadowsocks为例。
docker run -d -p 2001:2001 –net shadownet –ip 172.18.0.10 oddrationale/docker-shadowsocks -s 0.0.0.0 -p 2001 -k 123456 -m aes-256-cfb

其他
备注1:这里是固定IP地址的一个应用场景的延续,仅作记录用,可忽略不看。
备注2:如果需要将指定IP地址的容器出去的请求的源地址改为宿主机上的其他可路由IP地址,可用iptables来实现。比如将静态IP地址172.18.0.10出去的请求的源地址改成公网IP104.232.36.109(前提是本机存在这个IP地址),可执行如下命令:
iptables -t nat -I POSTROUTING -o eth0 -d 0.0.0.0/0 -s 172.18.0.10 -j SNAT –to-source 104.232.36.109

1
2
1. 获取docker容器的IP使用命令:docker inspect 容器ID
2. 然后过虑出 IPAddress 即可查看 Docker 的IP :docker inspect 容器ID | grep IPAddress

容器修改后创建镜像推送,阿里云为例

  1. sudo docker commit [容器的名字] [nameSpace]/[名字]:[版本]

    1
    注: 这里已经创建了一个新的image镜像文件
  2. 推送到阿里云上面,需要重新命名

    1
    2
    3
    4
    $ sudo docker login --username=xxx xxx
    $ sudo docker tag [ImageId] xxx:[镜像版本号]
    $ sudo docker push xxx:[镜像版本号]
    其中xxx请参考自己的仓库的信息

docker容器和主机互相拷贝文件

1
2
1.容器到主机 docker cp <containerId>:/file/path/within/container /host/path/target
2. 主机到容器,反过来就可以

docker容器启动

1
2
3
4
5
6
7
    1. docker run -dti -p 11:11 -v E:/worke:/data  --name nginx  --restart always nginxId
2. 使用在Docker run的时候使用--restart参数来设置。
3. no - container:不重启 / on-failure - container:退出状态非0时重启 / always:始终重启
4. -d 后台启动 -t -i ? / -p 映射的端口 / -v 挂载的目录 / --name 重定义名字
5. 一个gitlab的例子:
docker run -t -i --detach --hostname 10.2.2.189 --publish 8443:443 --publish 80:80 --publish 8022:22 --name gitlab --restart always --volume /home/le/gitlab/config:/etc/gitlab --volume /home/le/gitlab/logs:/var/log/gitlab --volume /home/le/gitlab/data:/var/opt/gitlab --privileged=true registry.cn-hangzhou.aliyuncs.com/lab99/gitlab-ce-zh
(22和443端口经常会被占用,这里看自己的情况修改)

docker mq启动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run --name='activemq' -d \
-e 'ACTIVEMQ_NAME=amqp-srv1' \
-e 'ACTIVEMQ_REMOVE_DEFAULT_ACCOUNT=true' \
-e 'ACTIVEMQ_ADMIN_LOGIN=admin' -e 'ACTIVEMQ_ADMIN_PASSWORD=fJbbIDUzllkv' \
-e 'ACTIVEMQ_WRITE_LOGIN=producer_login' -e 'ACTIVEMQ_WRITE_PASSWORD=TgVodjA1WYoR' \
-e 'ACTIVEMQ_READ_LOGIN=consumer_login' -e 'ACTIVEMQ_READ_PASSWORD=YRq49Vz6kv3X' \
-e 'ACTIVEMQ_JMX_LOGIN=jmx_login' -e 'ACTIVEMQ_JMX_PASSWORD=3RincOQObyK5' \
-e 'ACTIVEMQ_STATIC_TOPICS=topic1;topic2;topic3' \
-e 'ACTIVEMQ_STATIC_QUEUES=queue1;queue2;queue3' \
-e 'ACTIVEMQ_MIN_MEMORY=1024' -e 'ACTIVEMQ_MAX_MEMORY=4096' \
-e 'ACTIVEMQ_ENABLED_SCHEDULER=true' \
-v /data/activemq:/data/activemq \
-v /var/log/activemq:/var/log/activemq \
-p 8161:8161 \
-p 61616:61616 \
-p 61613:61613 \
docker.io/webcenter/activemq

容器挂载目录权限不够

1
加上  --privileged=true 参数,给与容器特殊权限

docker pull镜像很慢

  1. 因为pull直接是国外的镜像,docker hub在中国没有cdn分发。
  2. 阿里云开发者
  3. 使用阿里云的镜像加速,在阿里云开发者注册帐号。在控制台->docker镜像仓库->加速器
  4. 在这里会有每个人的专属加速的url网址,下面有介绍如何使用

docker镜像

  1. 容器转成镜像:

    1
    sudo docker commit <CONTAINER ID> imagename01
  2. 容器转成文件:

    1
    sudo docker export <CONTAINER ID> > /home/export.tar
  3. 镜像转成文件:

    1
    2
    sudo docker save imagename01 > /home/save.tar
    注:一般情况下,save.tar比export.tar大一点点而已,export比较小,因为它丢失了历史和数据元metadata
  4. 文件转成镜像:

    1
    cat /home/export.tar | sudo docker import - imagename02:latest
  5. save.tar文件转成镜像:

    1
    docker load < /home/save.tar

    注: save和export的区别是 save会记录历史,export只记录当前的镜像
    查看转成的镜像:sudo docker images

fastdfs安装测试

安装略过

配置tracker

  1. 进入到 /etc/fdfs 目录下,复制模版文件tracker.conf.sample到 tracker.conf
  2. 创建数据文件和日志文件目录:mkdir -pv /data/fastdfs/tracker
  3. 编辑 tracker.conf 文件,测试的时候只需要修改以下参数即可
    1
    2
    3
    4
    5
    disabled=false                  #启用配置文件
    port=22122    #设置 tracker 的端口号
    base_path=/data/fastdfs/tracker   #设置 tracker 的数据文件和日志目录(需预先创建)
    http.server_port=8080    #设置 http 端口号
    这个http.server_port=8080 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口,这个似乎是可以不用管的,因为tracker本身就没有安装http服务
  4. 运行tracker直接使用 fdfs_trackerd 来启动tracker进程,然后使用netstat 查看端口是否起来。
  5. [root@wangyinxiang fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf restart

配置storage

  1. 进入到 /etc/fdfs 目录下,复制/usr/fastdfs/fastdfs-5.05/conf/* 下面的所有文件到当前目录下(/etc/fdfs)
  2. 编辑配置文件 storage.conf 测试的时候,只需修改以下内容即可:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    复制代码
    [root@wangyinxiang /etc/fdfs]# vim storage.conf
    disabled=false#启用配置文件
    group_name=group1       #组名,根据实际情况修改
    port=23000       #设置 storage 的端口号
    base_path=/data/fastdfs/storage      #设置 storage 的日志目录(需预先创建)
    store_path_count=1       #存储路径个数,需要和 store_path 个数匹配
    store_path0=/data/fastdfs/storage       #存储路径
    tracker_server=10.1.20.245:22122        #tracker 服务器的 IP 地址和端口号
    http.server_port=8080       #设置storage上启动的http服务的端口号,如安装的nginx的端口号
  3. 运行:
    1
    [root@wangyinxiang /etc/fdfs]# fdfs_storaged /etc/fdfs/storage.conf restart
  4. 查看端口是否起来
    1
    2
    3
    [root@wangyinxiang /etc/fdfs]# netstat -antp | grep storage
    tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 10333/fdfs_storaged
    tcp 0 0 10.1.20.245:57886 10.1.20.245:22122 ESTABLISHED 10333/fdfs_storaged
  5. 可以使用 fdfs_monitor 来查看一下storage的状态,看是否已经成功注册到了tracker
    1
    2
    3
    fdfs_monitor /etc/fdfs/storage.conf
    也可以以下命令来监控服务器的状态:
    fdfs_monitor /etc/fdfs/client.conf
    注:看到ACTIVE,就说明已经成功注册到了tracker。

测试

  1. 客户端上传文件
  2. FastDFS安装包中,自带了客户端程序,通过程序可以进行文件上传。在使用这个客户端程序之前,首先需要配置client.conf,然后再进行文件上传及下载。
  3. a、修改/etc/fdfs/client.conf文件,修改如下:
    1
    2
    3
    4
    5
    base_path=/home/yuqing/fastdfs--> base_path=/home/soar/fastdfs_tracker  
    tracker_server=192.168.209.121:22122 --> tracker_server=10.1.20.245:22122 (ip根据自己本机的处理)
    http.tracker_server_port=80 ->http.tracker_server_port=8080
    #支持http
    ##include http.conf ->#include http.conf
  4. 进入/usr/local/bin/目录,上传文件,执行
    1
    2
    sudo fdfs_test  /etc/fdfs/client.conf upload a.txt   
    注:a.txt可以在/usr/local/bin/目录下自己创建一个
  5. 如果命令行反馈类似如下: 说明上传完成。

centos安装docker

centos安装docker

centos内核低于3.8处理,通过yum安装

  • 第一步,先看目前的内核版本 uname -r

  • 第二步,导入public key: rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

  • 第三步,安装ELRepo: rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

  • 第四步,安装内核

    1
    2
    3
    在yum的ELRepo源中,有mainline(4.6)、long-term(3.10)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。
    查看ELRepo源中内核:http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
    安装命令: yum --enablerepo=elrepo-kernel install kernel-lt -y
  • 第五步,编辑grub.conf,修改Grub引导顺序

    1
    vim /etc/grub.conf  确认刚安装好的内核在哪个位置,然后设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。
  • 第六步,重启,查看内核版本号

参考资料:
http://elrepo.org/tiki/tiki-index.php

iptables删除规则

删除iptables的规则

第一种办法

  1. iptables -t nat -L -n –line-numbers (|grep [端口/ip]) 查看当前有几条规则
  2. iptables -t nat -D PREROUTING 1 删除序列号为1的规则

第二种办法(第一种我试过有时候没用)

  1. iptables-save >/tmp/somefile
  2. vim /tmp/somefile 找到对应的nat规则
  3. iptables-restore < /tmp/somefile

jstack定位死循环代码

定位正在运行的程序死循环处(linux处使用)

查看java的pid

  1. ps -ef | grep java 或者使用 top
    找到你的java程序的进程id, 定位 pid

  2. top -Hp $pid
    查看耗cpu时间最多的几个线程, 记录下线程的id.注:这里的进程是10进制的。

  3. jstack $pid > stack.log 生成dump文件。将上面线程的id换成16进制,加上0x$id 。查找dump出来的文件。就是该线程的堆栈信息

  4. 统计线程数量 ps -hH $pid| wc -l

    cpu运行

    top 按1键看每个数据,z 彩色 c是, f是

  5. us是用户的,运行一些数据会飙升

  6. sy系统调度资源

  7. ni 运行已调整优先级的用户进程的CPU时间

  8. id 空闲的,

  9. wa 等待

  10. hi 处理硬件中断的CPU时间

  11. si 处理软件中断的CPU时间

场景1:java启动100个cpu密集型任务,在24核上处理,假设平均的分在每一核心上执行, us或者sy很高,us执行,sy调度。id和wa很低

查看程序占用端口

  1. linux : netstat -naop
  2. windows: netstat -ano |findstr 62045

shadowsocks安装

安装pip3

yum install python34-pip -y
pip3 install shadowsocks

编辑配置文件

vim /etc/shadows.conf
{
“server”:”0.0.0.0”,
“port_password”:{
“9001”:”vb6Zx5ty”,
“9002”:”vb6Zx5ty”,
“9003”:”vb6Zx5ty”
},
“timeout”:300,
“method”:”aes-256-cfb”,
“fast_open”: false
}

#注:配置文件中,启动了三个监听端口

启动

ssserver -c /etc/shadows.conf -d start &