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容器
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 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该容器内的应用程序会使用指定端口
-------------------
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