docker基础

https://www.docker.com    #官网地址

https://hub.docker.com    #docker hub地址,很多镜像都在里面

rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm   #安装epel源

https://opsx.alibaba.com/mirror    #docker阿里镜像

cd /etc/yum.repos.d

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo      ##下载docker  yum文件

安装

yum install -y yum-utils device-mapper-persistent-data lvm2

yum   -y   install docker-ce   #安装docker 

启动docker

systemctl start docker

systemctl enable docker 开机自启动

查看docker版本和信息

docker --version

docker info

获取镜像和查看 导出 导入 删除镜像

docker search centos    ##搜索镜像

docker pull centos    ##下载镜像

docker images  #查看本地镜像

docker save  -o centos.tar centos;lastest   ##导出镜像

docker load --input centos.tar    ##导入镜像

 docker rmi  ID    ###删除镜像

docker rmi -f 镜像名称   ##强制删除镜像

启动容器 停止 查看  进入 删除

docker run --name -h hostname

docker run --name mydocker  -it  nginx  /bin/bash   #启动并进入容器

docker start coentos 启动容器

docker stop CONTANINER ID   ##停止容器

docker ps  -a -l  #查看最近的进程

docker ps  -a -q    #显示所有容器ID

docker exec |nsenter

 docker rm -f  容器ID   #删除容器

docker attach mydocker   进入docker容器

docker stats ID #查看进程内存,cpu,网络使用率等资源信息

yum  -y install util-linux  #安装nsenter

 docker inspect mydocker   #获取docker容器详情

docker inspect --format   "{{ .State.Pid }}"    mydocker   获取容器第一个进程的PID

nsenter --target 3767 --mount -uts --ipc --net --pid    #进入容器

docker exec mydocker whoami    ##在一个正在执行的容器里直接执行命令

docker exec -it CONTAINER ID /bin/bash  #进入docker容器

docker run  --rm centos /bin/echo   "hehe"   #容器执行完毕自动退出并删除  

docker run  -d  -p 3333:80   --name  nginx-demo   nginx  #后台启动容器 指定端口

 docker run -d --rm --name nginx-test1 -v /data  nginx   #容器退出自动删除

docker  run  -d  --name  volume-demo   -v /data:/data   nginx   ##宿主机的data目录挂载到容器的/data目录

docker run -d  --name   nginx-volume-demo   --volumes-from  volume-demo  nginx   ##使用volume-demo的存储

docker volume create nginx-vol #创建volume

 docker run -d -v nginx-vol:/usr/share/nginx/html --name web4 -p 8083:80 nginx  ###volume方式挂载

docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx  # 另一种方式挂载

volume和bind mount两种挂载方式一样,写绝对路径代表bind方式,不写绝对路径代表volume方式

volume方式不会覆盖目的目录的内容,bind方式会覆盖目的目录内容。

网络模式

bridge 桥接
docker network create test #创建虚拟网络
docker run -it --net=test  --hostname aa.cn busybox sh #加入网络组,方面互相通讯
 
host    与宿主机共用网络信息
docker run -d --net=host nginx #本地启动80端口,无需映射
 
none
-net=none #没用网络,需要手动配置网卡信息
container
-net-container:ID/Name #与指定的容器使用同一个network
 
docker network ls
ss -anpt #查看端口信息

跨主机通讯

Flannel+etcd

1.一台机器安装etcd即可

修改配置文件 vi /etc/etcd/etcd.conf

 

cat /etc/etcd/etcd.conf |grep -v "#"|grep -v "^$"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.4:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.4:2379"

 

2.所有主机都要安装flannel

cat /etc/sysconfig/flanneld |egrep -v "^#|^$"
FLANNEL_ETCD_ENDPOINTS="http://192.168.1.4:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network" 

 指向etcd的IP端口

3.写入子网

etcdctl --endpoints="http://192.168.1.4:2379" set /atomic.io/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}' 

cat /var/run/flannel/docker
DOCKER_OPT_BIP="--bip=172.17.45.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1450"
DOCKER_NETWORK_OPTIONS=" --bip=172.17.45.1/24 --ip-masq=true --mtu=1450"

说明子网配置已经生成。

4.配置Docker使用flannel生成的网络信息

 vi /usr/lib/systemd/system/docker.service
EnvironmentFile=/run/flannel/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  $DOCKER_NETWORK_OPTIONS

5.所有主机都要开启防火墙配置

iptables -P FORWARD ACCEPT

6.重启服务

systemctl restart flanneld

systemctl daemon-reload

systemctl restart docker

验证即可ping通网络

构建镜像

手动

docker run --name mynginx -it centos /bin/bash   #进入mynginx容器

yum   -y   install   nginx

docker commit -m "My ningx" 9b78cd5667cb  mynginx:v1  ##提交

docker run -d -p 91:80 mynginx:v1 nginx  ##启动镜像

通过dockerfile自动构建

mkdir -p  /opt/dockerfile/mynginx

#cat Dockerfile

#Base Image
FROM centos

#Maintainer
MAINTAINER    LIU  xxxxxx@abc.com

#RUN
RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum -y install nginx --enablerepo=epel
RUN echo "daemon off;" >>/etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 90
CMD  ["nginx"]

FROM:每个dockerfile的第一条指令都是FROM。指定一个已经存在的镜像作为基础镜像

MAINTAINER:指定作者及联系地址

RUN:当前镜像中运行的指令

EXPOSE:告诉docker该容器内的应用程序会使用指定端口

CMD [“executable”,“param1”,“param2”] :exec形式(首选)
CMD command param1 param2 Shell形式

-------------------

docker build -t mynginx:v2 .

通过supervisor管理容器多进程

yum -y install  supervisor

ls -l /etc/supervisord.*

以构建centos镜像+ssh为例

 1 #Base Image
 2 FROM centos
 3 
 4 #Maintainer
 5 MAINTAINER liumengjie@koolearn.com
 6 
 7 #RUN
 8 RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
 9 RUN yum install -y wget sudo git tree net-tools supervisor  openssh-clients openssh-server openssl-devel&& yum clean all
10 RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
11 RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
12 RUN ssh-keygen -A -t dsa -f /etc/ssh/ssh_host_dsa_key
13 
14 #set root pwd
15 
16 RUN echo "root:123.com"| chpasswd
17 
18 #For Supervisor
19 ADD supervisord.conf  /etc/supervisord.conf
20 ADD sshd.ini  /etc/supervisord.d/sshd.ini
21 
22 #Outside port
23 EXPOSE 22
24 
25 CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]
cat sshd.ini

[program:sshd]
command=/usr/sbin/sshd -D       
process_name=%(program_name)s 
autorestart=true         

  

修改  nodaemon=true

docker build -t system/centos .    ##构建镜像

docker run -d --name centos-ssh-supervisor -p 2222:22 system/centos    ##启动镜像

ps -aux   #查看进程

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.8  0.1 115572 14692 ?        Ss   13:39   0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root        10  0.0  0.0 112724  4216 ?        S    13:39   0:00 /usr/sbin/sshd -D
root        11  1.1  0.0 155144  5968 ?        Ss   13:40   0:00 sshd: root@pts/0
root        13  0.2  0.0  15252  1916 pts/0    Ss   13:40   0:00 -bash
root        26  0.0  0.0  55140  1796 pts/0    R+   13:40   0:00 ps aux

 supervisorctl   status   ##查看supervisor管理的进程

 构建JDK+TOMCAT运行环境

mkdir  -p  /opt/dockerfile/runtime/tomcat  #新建目录

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz     #下载tomcat

cat  DOckerfile

#Base Image
FROM system/centos

#Maintainer
MAINTAINER liumengjie@koolearn.com

#RUN
RUN yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel && yum clean all
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk

#Tomcat
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN ln -s /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat

#For Supervisor
ADD tomcat.ini  /etc/supervisord.d/tomcat.ini
ENV TOMCAT_HOME /usr/local/tomcat

#Outside port
EXPOSE 22 8080

CMD ["/usr/bin/supervisord","-c","/etc/supervisord.conf"]

  

cat tomcat.ini

[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run
process_name=%(program_name)s 
autorestart=true

  

docker build -t runtime/tomcat .   #构建

docker run -d --name tomcat-demo -p 8080:8080  -p 8888:22 runtime/tomcat   ##启动

http://10.1.1.1:8080/     访问测试

 使用harbor构建私有仓库

# wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0-rc1.tgz     ###下载

tar zxvf harbor-offline-installer-v1.7.0-rc1.tgz      #解压

cd harbor/

yum -y install python-pip

pip install docker-compose   #安装依赖

cat /etc/docker/daemon.json   #添加信任

{
"registry-mirrors": ["https://tdimi5q1.mirror.aliyuncs.com"],
"insecure-registries": ["http://10.155.20.195"]
}

systemctl restart docker    #重启docker

修改 harbor.cfg

hostname = 10.155.20.195

./install.sh   #启动

浏览器访问  http://10.10.20.10/harbor

docker tag app/jenkins 1010.20.10/app/jenkins:v1    #给镜像打标签

docker push 1010.20.10/app/jenkins    #推送到harbor

posted @ 2018-11-18 23:06  liumj  阅读(188)  评论(0编辑  收藏  举报