当前位置: 首页 > 工具软件 > fix_docker_ip > 使用案例 >

docker

归鹤龄
2023-12-01

国外下载镜像



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

 类似资料: