国外下载镜像
k8s.gcr.io、gcr.io仓库的镜像下载_萌褚的博客-CSDN博客_k8s国内镜像仓库
一、docker安装
centos6.5
升级内核
cd /etc/yum.repos.d
wget http://www.hop5.in/yum/el6/hop5.repo
yum install kernel-ml-aufs kernel-ml-aufs-devel
修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)。
重启系统,这时候你的内核就成功升级了
uname -r
查看内核是否支持aufs:
grep aufs /proc/filesystems
yum install device-mapper
yum install -y epel-release
yum install -y docker-io
vim /etc/sysconfig/docker
service docker start
docker version
centos7
1、官网安装手册
https://docs.docker.com/install/linux/docker-ce/centos/
https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/#prerequisites
2、centos7版本
cat /etc/redhat-release
3、gcc
yum -y install gcc
yum -y install gcc-c++
4、旧版本卸载
sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine
5、安装需要的包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
6、安装镜像
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
7、更新yum软件包索引
yum makecache fast
8、安装docker ce
sudo yum install docker-ce
yum list docker-ce --showduplicates | sort -r
9、启动docker
sudo systemctl start docker
10、测试
docker version
docker run hello-world
11、配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
{
"registry-mirrors": ["http://{自己的编码}.mirror.aliyuncs.com"]
}
12、卸载
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
ubuntu
Ubuntu-16.04下Docker通过阿里云镜像安装(apt-get)_lengch3的博客-CSDN博客
二、镜像加速器配置
1、阿里云镜像加速器配置
https://dev.aliyun.com/search.html
获得加速器地址
https://fdf.mirror.aliyuncs.com
配置本级docker镜像加速器
other_args="--registry-mirror=https://fdf.mirror.aliyuncs.com"
service docker restart
检测是否生效
ps -ef|grep docker
2、网易云镜像加速器配置
三、helloworld镜像
docker run hello-world
四、docker帮助命令
docker version
docker info
docker --help
五、镜像命令
docker images
REPOSITORY 镜像的仓库源
TAG 镜像的标签 同一个仓库源可以有多个TAG,代表这个仓库源的不同个版本,使用REPOSITORY:TAG来定义不同版本的镜像。如果不知道版本表示REPOSITORY:latest
IMAGE ID 镜像ID
VIRTUAL SIZE 镜像大小
-a 列车所有镜像,包括中间镜像
-q 只显示镜像ID
--digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
docker search
网站 https://hub.docker.com
-s 30 列出收藏数不小于指定值的镜像
--no-trunc 显示完整的镜像信息
--automated 只列出automated build类型的镜像
docker pull 下载镜像
docker pull 镜像名称:TAG
docker rmi 删除某个镜像
-f 强制删除
删除多个
docker rmi 镜像名:TAG 镜像名:TAG
删除全部镜像
docker rmi -f $(docker images -qa)
六、容器命令
有镜像才能创建容器
docker pull centos
新建并启动容器
docker run [options] image [command] [arg...]
options说明(常用):有些是一个减号,有些是两个减号
--name="容器新名称":为容器指定一个名称
-d:后台运行容器,并返回容器ID,也即启动守护式容器
-i:以交互式模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同事使用
-P:随机端口映射
-p:指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
列出当前运行的容器
docker ps
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
退出容器
exit 容器停止退出
ctrl+P+Q 容器不停止退出
启动容器
docker start 容器ID或者容器名称
重启容器
docker restart 容器ID或者容器名称
停止容器
docker stop 容器ID或者容器名称
强制停止容器
docker kill 容器ID或者容器名称
删除已停止的容器
docker rm 容器ID或者容器名称
docker rm -f $(docker ps -a -q)
doker ps -a -q | xargs docker rmi
启动守护式容器
docker run -d 容器名
查看容器日志
docker logs -f -t --tail 容器ID
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
重新进入docker attach 容器ID
attach直接进入容器启动命令的终端,不会启动新的进程
exec是在容器中打开新的 终端,并且可以启动新的进程
从容器内拷贝文件到主机上
docker 产品容器ID:容器内路径目的主机路径
七、容器数据卷
是什么
Docker容器产生的数据,如果不通过docker commit生成新的镜像,是的数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
能干什么
卷就是目录或文件,存在于一个或多个容器中,有docker挂载到容器,但不属于联合文件系统,因此能够绕过union file system 提供一些用于持续存储或共享数据特性。
卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除其挂载的数据卷。
特点:
数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
命令添加数据卷
V命令添加容器数据卷
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer centos
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos 只读
DockerFile添加容器数据卷
根目录下新建mydocker文件夹并进入
mkdir mydocker
可在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
vim Dockerfile
File构建
# volume tests
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,---------success1"
CMD /bin/bash
build后生成镜像
docker build -f /mydocker/Dockerfile -t dengqiang.centos .
run容器
docker run -it dengqiang.centos
通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址
主机对应默认地址
docker inspect 容器ID
docker 挂载主机目录Docker访问出现cannot open directory . : Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
容器数据全volumes-from
docker run -it --name dc02 --volumes-from dc01 dengqiang/centos
八、DockerFile
1、是什么:Dockerfile是用来构建Docker镜像的构建文件,是有一些列命令和参数构成的脚本。
2、构建三步骤:编写Dockerfile文件, docker build, docker dun
3、Dockerfile 解析过程
Dockerfile内容基础知识:
每条保留字指令都必须为大写字母 切后面要跟随至少一个参数
指令按照从上到下,顺序执行
#表示注释
每条指令都会创建一个新的镜像层,并对镜像进行提交
docker执行Dockerfile的大致流程:
docker从基础镜像运行一个容器
执行一条指令并对容器做出修改
执行类似docker commit的操作提交一个新的镜像层
docker再基础于刚提交的镜像运行一个新容器
执行Dockerfile中的下一条指令知道所有指令都执行完成
十、保留关键字
1、FROM 基础镜像,当前镜像是基于哪个镜像的
2、MAINTAINER 镜像维护者的姓名和邮箱地址
3、RUN 容器构建时需要运行的命令
4、EXPOSE 当前容器对外暴露出的端口
5、WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
6、ENV 用来构建镜像过程中设置环境变量
7、ADD 将宿主机目录下的文件拷贝镜像且ADD命令会自动处理URL和解压tar压缩包
8、COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件、目录复制到新的一层镜像内的<目标路径>位置
9、VOLUME 容器数据卷,用于数据保存和持久化工作
10、CMD 指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD,但只有一个最后生效,CMD会被docker run之后的参数替换
11、ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
12、ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
十一、自定义镜像mycentos
1、Base镜像(scratch)
Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。
2、自定义镜像mycentos
编写:
准备编写Dockerfile文件
mycentos内容DockerFile
FROM centos
MAINTAINER 772010988<772010988@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------ok"
CMD /bin/bash
构建:
docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .
运行
docker run -it mycentos:1.3
列出镜像的便跟历史
docker history 42505e4688b3
十二、CMD-ENTRYPOINT命令
都是指定一个容器启动时要运行的命令
CMD
Dockerfile中可以有多个CMD,但只有最后一个生效,CMD会被docker run之后的参数替换
case : docker run -it -p 7777:8080 tomcat
ENTRYPOINT docker 润之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合
case :
制作CMD板可以查询IP信息的容器
FROM centos
RUN yum -y install curl
CMD ["curl","-s","http://ip.cn"]
问题
如果我们希望现实THHP头信息,就需要加上-I参数
WHY
制作ENTRYPOINT版查询IP信息的容器
FROM centos
RUN yum -y install curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
十二、自定义的tomcat9
1、mkdir -p /mydocker/mydockerfile/tomcat9
2、在上述目录下新建touch.txt
3、将jdk和tomcat安装的压缩包拷贝进上一目录---apache-tomcat-9.0.8.tar.gz---jdk.tar.gz
4、在/mydocker/mydockerfile/tomcat9目录下新建Dockerfile文件
FROM centos
MAINTAINER 772010988<772010988@qq.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/locl/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk.tar.gz /usr/local/
ADD tomcat.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#设置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk.1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
5、编译
docker build -t tomcat9 .
6、运行
docker run -d -p 9080:8080 --name myt9 -v /mydocker/mydockerfile/tomcat9/test:/mydocker/mydockerfile/tomcat9/webapps/test
-v /mydocker/mydockerfile/tomcat9logs/:/mydocker/mydockerfile/tomcat9/logs --privileged=true tomcat9
7、验证
8、结合前述的容器卷将测试的web服务test发不
十三、mysql安装
1、docker search mysql
2、docker pull mysql:5.6
3、docker images
4、docker run -p 123456:3306 --name=mysql
-v /mysql/conf:/etc/mysql/conf.d
-v /mysql/logs:/logs
-v /mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWRD=123456 -d mysql:5.6
十四、redis安装
1、docker search redis
2、docker pull redis:3.2
3、docker images
4、docker run -p 6379:6379
-v /myredis/data:/data
-v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf
-d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
--appendonly yes
十五、本地镜像推送到阿里云
$ sudo docker login --username=dq772010988 registry.cn-shenzhen.aliyuncs.com
$ sudo docker tag 42505e4688b3 registry.cn-shenzhen.aliyuncs.com/dqdocker/mysentos:1.3
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/dqdocker/mysentos:1.3
$sudo docker pull registry.cn-shenzhen.aliyuncs.com/dqdocker/mysentos:1.3
十六、容器网络连接
网桥管理程序
sudo apt-get install bridge-utils
sudo brctl show
docker run -it --name nwt1 ubuntu /bin/bash
ifconfig
sudo brctl show
修改docker0IP
sudo ifconfig docker0 192.168.200.1 netmask 255.255.255.0
添加虚拟网桥
sudo brctl addbr bro
sudo ifconfig bro 192.168.200.1 netmask 255.255.255.0
更改docker守护进程的启动配置
/etc/default/docker中添加DOCKER_OPS值
-b=br0
容器互联
FROM ubuntu
MAINTAINER 772010988<772010988@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN apt-get update
RUN apt-get -y install vim
RUN apt-get -y install net-tools
RUN apt-get -y install iputils-ping
RUN apt-get -y install curl
RUN apt-get -y install nginx
CMD /bin/bash
--link
docker run --link=[name]:[alias] [images] [commond]
docker run -it --name cct3 --link=cct1:webtests myubuntu:1.4
--icc=false
vim /etc/default/docker
DOCKER_OPTS="--icc=false"
特定容器连接
--iptables=true
DOCKER_OPTS="--icc=false --iptables=true"
//ubuntu
1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
安装
sudo apt-get install iptables
添加规则
sudo iptables -I INPUT -p tcp --dport 5432 -j ACCEP
sudo iptables-save
这里我们需要在安装一下工具来帮我们实现,这里我们使用 iptables-persistent
安装iptables-persistent
sudo apt-get install iptables-persistent
持久化规则
sudo netfilter-persistent save
sudo netfilter-persistent reload
完成上述操作就可以永久打开我们需要的端口了
Docker默认的配置文件/etc/default/docker或者/etc/sysconfig/docker都不起作用,查看了一下/lib/systemd/system/docker.service文件,
发现里面没有加载默认配置文件,一些配置不知道要怎么弄了~~~
解决办法是:
$ vi /lib/systemd/system/docker.service
#添加一行
$ EnvironmentFile=-/etc/default/docker
或者
$ EnvironmentFile=-/etc/sysconfig/docker
#-代表
ignore error
#并修改
$ ExecStart=/usr/bin/docker daemon -H fd://
#改成
$ ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
这样才能使用/etc/default/docker里定义的DOCKER_OPTS参数
$ systemctl daemon-reload 重载
$ sudo service docker restart
虚拟网桥多机通信
修改/etc/default/docker文件
1、-b指定使用的自定义网络
-b=br0
2、--fixed-cidr限制ip分配范围
IP地址划分
Host1:10.211.55.64/26 65-126
Host2:10.211.55.129/26 129-190
修改/etc/network/interfaces
auth br0
iface br0 inet static
address 10.211.55.3
netmask 255.255.255.0
gateway 10.211.55.1
bridge_ports eth0
Docker网络设置_gezhonglei2007的博客-CSDN博客
十八、docker-complos
docker-compose安装
Docker-Compose是一个部署多个容器的简单但是非常必要的工具.
安装Docker-Compose之前,请先安装 python-pip
安装 python-pip
1、首先检查linux有没有安装python-pip包,终端执行 pip -V
2、没有python-pip包就执行命令 yum -y install epel-release
3、执行成功之后,再次执行yum -y install python-pip
4、对安装好的pip进行升级 pip install --upgrade pip
安装Docker-Compose
1.终端执行:pip install docker-compose --ignore-installed requests
2、检查docker-compose 安装:docker-compose -version
docker-compose --version
docker-compose
docker-compose up --help
docker-compose -f docker-compose.yml up
docker-compose -f docker-compose.yml up -d
docker ps
docker-compose ps
docker-compose stop
docker-compose start
docker-compose down
docker-compose images
docker-compose exec mysql
docker-compose.yml
services:
db:
image:postgres:9.4
volumes:
- "db-data:/var/lib/postgresql/data"
networks:
- back-tir
docker run -d --network back-tir -v db-data:/var/lib/postgresql/data postgres:9.4
services:
worker:
build: ./worker
links:
- db
- redis
networks:
- back-tir
完整例子
version: '3'
services:
wordpress:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-bridge
mysql:
image: mysql
environment:
WORDPRESS_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-bridge
volumes:
mysql-data:
networks
my-bridge:
driver: bridge
command:
- "--mysql-address=192.168.137.100"
links:
- user-service
十九、镜像仓库
1、共有仓库
docker tag spring-cloud-eureka dq772010988/spring-cloud-eureka:1.0
docker push dq772010988/spring-cloud-eureka:1.0
docker login
2、私有仓库
docker pull registry:2
docker run -d -p 5000:5000 --name registry registry:2
docker push dq772010988/spring-cloud-eureka:1.0
3、harbor
tar -zxvf harbor-offline-installer-v1.2.2.tar
vim harbor.cfg
hostname = 192.168.137.180
vim docker-compose.yml
./install.sh
docker login 192.168.137.180
docker tag centos 192.168.137.180/centos:latest
docker push 192.168.137.180/centos:latest