Docker学习笔记

Docker

Linux下安装docker

centos6 下安装

  1. yum install -y epel-release
  2. yum install -y docker-io
  3. 安装后配置文件 、etc/sysconfig/docker
  4. 启动docker 后台服务 server docker start
  5. docker version 验证

centos7 安装 https://docs.docker.com/engine/install/centos/

  1. 首先关闭防火墙

    systemctl status firewalld (查看防火墙状态)

    systemctl stop firewalld (停止防火墙)

    systemctl disable firewalld(禁止开机启动)

  1. ping不通网络
 1、打开 vi /etc/sysconfig/network-scripts/ifcfg-eth0(ip addr),把ONBOOT=no,改为ONBOOT=yes
 2、打开 vi /etc/resolv.conf,增加 nameserver 8.8.8.8
 3、重启网络: service network restart
  1. yum list错误:Cannot find a valid baseurl for repo: base/7/x86_6

    https://blog.csdn.net/qq_37922264/article/details/81054673

  2. yun repolist all 错误

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
  3. Linux 重启之后ip变化

    https://blog.csdn.net/qq_27385759/article/details/77247302

    如果修改完还上不去网,检查vmware 服务是否开启

  4. linux系统 中 centos扩容

    https://www.cnblogs.com/leiblog/p/13560070.htm

  5. Centos7.5 防火墙关闭但是除22端口其他端口无法访问问题

    启动: systemctl start firewalld

    关闭: systemctl stop firewalld

    查看状态: systemctl status firewalld

    重新加载配置文件:firewall-cmd --reload

  1. 官网的步骤下载Docker
$ sudo yum install -y yum-utils

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly

yum-config-manager --enable docker-ce-test

yum-config-manager --disable docker-ce-nightly

yum install docker-ce docker-ce-cli containerd.io
yum list docker-ce --showduplicates | sort -r      查看docker版本信息

后续可做以下操作:

systemctl start docker(启动docker)
systemctl enable docker(设为开机启动)

如果xshell连接不上:

​ 可能是服务没启动 service ssh start

docker 命令没有权限执行

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用

Docker离线镜像的下载与上传

#查看镜像
docker images
#保存镜像
docker save xxxxx  -o  /home/docker/xxxx.tar
#上传至另一台服务器
docker load -i xxxxx.tar  

阿里云镜像加速

​ 配置加速器地址:阿里镜像

Docker其他命令

  1. Docker后台运行
docker run -d xxx
  1. Docker查看日志
docker logs -f -t --tail xxxx
  1. Docker 查看容器内部进程信息
docker top xxx
  1. 查看容器内部信息
docker inspect xxx

mounts:中显示的是挂载文件
  1. 进入容器
docker exec -it xxx
  1. 提交commit
docker commit -m="描述" -a="作者"  id  名称:1.0

Docker

仓库、镜像、容器

touch 03.txt 新建文件

1、是什么?

​ 开发环境与部署环境不同,会造成多于的问题。

​ 一次封装,到处运行

​ 解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

​ 小型精华版Linux

2.Docker安装

​ docker的安装必须在centos6.5以上

​ 容器通过镜像创建

3.docker run hello-world :运行镜像

image-20201218231645981

4.docker为什么比虚拟机快

​ 1.docker有着比虚拟机更少的抽象层,减少了硬件的虚拟化

​ 2.docker利用的是宿主机的内核,不需要guestos

5.常用命令

1.帮助命令
    docker version
    docker info 信息描述
    docker --help  帮助命令
    
2.镜像命令
    docker images 列出本地的镜像
        -a 列出本地全部的镜像
        -q 返回当前镜像id   组合-aq
        -digests 显示镜像备注
        --no-trunc 详细信息
    docker search 查询某个镜像的名字
        docker search -S 30 tomcat  点赞数超过三十
    docker pull xxx  拉取镜像
        docker pull  默认最新版,:版本号----下载需要的版本
    docker rmi xxx  删除镜像,默认删除最新的
        docker rmi -f xx  强制删除
        
3.容器命令
    docker  pull cesnos  下载centos镜像
    
    //利用下载的镜像启动centos容器
    docker run -it(打开终端) 名字 --name 别名xxx
        加上-p 对外暴露端口:8080 tomcat端口
    //不返回交互()
    docker run -d 名字   ---会启动之后立即退出  
    //查看日志
    docker logs -t -f  xxx编号
        -f追加
        --tail 30 最后三十行
    //进入容器
    docker attach  xxx编号
    
    docker exec  在外面操作docker
    
    //从容器中拷文件出来
    docker cp 编号:地址文件 需要拷贝到的地址文件
      
    //查看docker所有启动的容器
    docker ps
    
    //退出
    exit    //   crtl+p+q 相当于最小化
    
    //重启
    docker restart xxx容器编号
    
    //停止
    docker stop xxx编号
    
    //强制停止
    docker kill   xxx
    
    //删除停止的容器
    docker rm -f xx

6.镜像

轻量级可执行的独立软件包,用于打包软件运行环境和基于运行环境的开发软件

由一层层文件系统组成,这种层级的文件为UnionFS(联合文件系统)

img

为什么这种方式?

为了共享资源,共享镜像

1.提交自己的镜像
        docker commit -m="描述信息" -a=“作者”  编号  名字
        
        docker push
        
2.指定 docker映射到tomcat的端口
    docker -p docker暴露端口:8080(tomcat端口) 名称(tomcat)
    docker -P tomcat  随机分配端口

7.数据卷

为了保存容器中的数据,因为如果不保存,容器重启就失效。

能干嘛:数据持久化,容器间的数据共享。

1.在容器中添加数据卷

命令,dockerFIle

docker run -it -v /宿主机绝对路径:/容器内目录  镜像名
    容器停止退出后,主机修改会完全同步
    
docker run -itd
    
//容器设置权限,只读
docker run -it -v /宿主机绝对路径:/容器内目录:ro  镜像名
    

8.DockerFile

相当于类编译之后的源码,是构建镜像的文件(一系列命令和脚本)

image-20201218231710535

image-20201218231723108

容器间共享 docker run -it --name doc2 --volumes-from doc1(上一容器) mycentos

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

dockerFile 解析

image-20201218231735885

dockerFile 编写步骤
1.通过编写dockerFile文件,必须符合规范
2.直接使用docker build命令执行,或得自定义的镜像
3.docker run
dockerFile体系结构
基础知识
    每个保留字必须大写,保留字指令
    从上到下执行
    #表示注释
    每条指令回创建一个新的镜像层-----套娃

FROM  		#基础镜像,当前镜像基于哪个镜像
MAINTAINER  #进行维护者的姓名和邮箱
RUN  		#容器构建时需要运行的命令
EXPOSE  	#对外暴露的端口号
WORKDIR  	#登录之后的工作目录
ENV  		#设置环境变量
ADD,COPY  	#两个差不多,add拷贝加解压(比如添加tomcat的压缩包),copy直接只有拷贝
VOLUME  	#设置数据卷,保持数据持久化(挂载地址)
CMD  		#指定容器启动时执行命令(可以有多个,只有最后一个生效)
ENTRYPOINT 	#指定容器启动执行命令(追加命令)
ONBUILD   	#父镜像在被子镜像继承时  父镜像的ONBUILD会被触发(触发器)

    
docker执行dockerfile的大致流程
docker从基础镜像创建一个容器
执行一条指令对容器进行修改
执行类似dockercommit 操作提交一个新的镜像层
docker基于刚提交的镜像运行一个新容器
执行dockerfile下一条指令直到全部完成
    
    
 #自己制作一个centos
 vi dickerfile01
 #编写
 FROM centos
 VOLUME {"挂载目录1","挂载目录2"}  #匿名挂载,再宿主机自动生成了响应的目录(名称随机)
 CMD echo "----end---"
 CMD /bin/bash
 #运行(-f 执行的dockerfilr  -t 生成的名字)
 docker build -f /home/zbhou/dockerfile01 -t mycentos
docker容器间的数据共享
#启动centos01
docker run -d --name centos01 centos

#启动centos02---数据卷共享
docker run -d --name centos02 --voulms-from ceontos01 centos

image-20201218231827693

Base镜像: scratch

docker百分之九十的镜像都是通过base镜像搭建起来的

案例
1.定义 dockerfile
vim mydocker

    FROM centos
    ENV mypath /tmp
    WOrKDIR /temp  启动进入目录
    
    RUN yun -y install vim    配置自己需要的命令(默认不存在)
    RUN yun -y install vim
    
    EXPOSE 80
    CMD bin/bash

2.build
    docker build -f /路径/mycentos -t 取个名字:1.3(版本号)
    
3.运行容器
    docker run -it mycentos:1.3   

2.CMD

为 容器启动时 执行的命令
    docker run -it -p 7777:8080 tomcat ls -l
    相当于  ls -l 写在了cmd 后面,回覆盖之前的,不会启动tomcat,回展示当前资源
    
  1. ENTROYPOINT

    比cmd厉害一点,并不会覆盖cmd  可以为命令加参数(参数追加)
        把CMD换成 ENTROYPOINT
    

4.ONBUILD

有人继承该镜像是,执行父类的 ONBUILD 命令

5.COPY

类似ADD 拷贝文件和目录到镜像中,将从构建上下文的源路径的文件,复制到新一层的镜像中

6.ADD

移动加解压缩

在docker中的tomcat运行 web应用

image-20201218232031855

运行mysql

image-20201218232057257

docker运行mysql

#创建本地容器
mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
#在conf中创建conf文件
touch my.cnf
#去到上传镜像文件夹后启动镜像  root密码为123456
docker run -d --name mysql -p 3306:3306 -v /home/zbhou/docker/mysql/conf:/etc//mysql/conf.d -v /home/zbhou/docker/mysql/data:/var/lib/mysql -v /home/zbhou/docker/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

通过数据卷恢复mysql数据

docker运行DB2

docker run -d --name db2 -p 50000:50000 -e DB2INST1_PASSWORD=省缺用户密码 -e LICENSE=accept ibmcom/db2express-c:latest db2start

-d: 后台运行容器,并返回容器ID
--name db2 为容器指定一个名称
-p 50000:50000 允许远程的客户端可以从50000 端口连接到数据库实例
(端口映射,格式为:主机(宿主)端口:容器端口)
-e DB2INST1_PASSWORD=db2admin 为缺省的Db2实例用户db2inst1设置密码为db2admin
-e LICENSE=accept 表示接受了使用Db2软件的许可证协议
docker exec -it db2 /bin/bash
su db2inst1                           //切换用户
db2start                             //启动DB2
db2sampl                            //创建默认数据库“SAMPLE”


docker exec :在运行的容器中执行命令
-t :分配一个伪终端
db2 是容器的名称
复制:
	docker cp /root/init.sh  容器ID:/home/hundsun/workspace/log

问题

  1. DB2start 时:报错 SQL1026N The database manager is already active.

    执行 db2stop force

  2. 在db2inst1用户下创建数据库,在程序中指定schema

jdbc:db2://172.17.102.8:8017/boss:currentSchema=TIMER
  1. 删除db2database
#第一步:连接db2数据库
db2 connect to [dbname] user [username] using [password] 
#第二步:查看该数据库有多少应用
db2 list applications
#第三步:杀掉这些应用
db2 force applications all
#第四步:停止数据库
db2 deactivate database databasename
#第五步:断开数据库
db2 terminate
#第六步:删除db2数据库
db2 drop database databasename

Docker运行Nginx

  • 安装
  • 通过镜像启动容器
docker run --name nginx -it -d -p 80:80 502a83e111bf /bin/bash

docker run --name nginx  -d -p 80:80 -v /home/zbhou/docker/Nginx/conf.d:/etc/nginx/conf.d -v /home/zbhou/docker/Nginx/nginx.conf:/etc/nginx/nginx.conf 502a83e111bf tail -f /dev/null
  • etc下的nginx文件夹中 找到nginx的配置文件
  • 安装vi命令
apt-get  update
    
apt-get install vim 
  • 修改配置文件—注意修改nginx为文件开头

    • user  root;
      
  • 在conf.d 文件下新建配置文件 default.conf 文件

server
 {  
   listen 80;

   server_name 192.168.115.121;

#charset koi8-r;

#access_log /var/log/nginx/host.access.log main;

location / {

    root /usr/share/nginx/html;

    index index.html index.htm;

   }

location /api{

#   proxy_pass http://ip:port/api;

      # access_log "logs/test.log";
 } }
  • 如果浏览器打开80端口失败

    • 首先ping一下地址
    • 不可以进行下面操作
    curl http://localhost:80
    
    ---------没有该命令
    先执行
    apt-get update
    然后执行
    apt-get install curl
    

所遇问题

  1. 启动容器时立即退出,在容器后加入 tail -f /dev/null

  2. 启动 run时报错 # docker: Error response from daemon: driver failed programming external connectivity on endpoint lamp

    docker服务启动时定义的自定义链DOCKER被清除
    重启即可systemctl restart docker

  3. 打开端口失败 在centos7 上开启端口

    查看所有开启的端口
    firewall-cmd --list-ports
    防火墙开启端口访问
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    【重启命令】:  firewall-cmd --reload
        
    不过一般直接关闭防火墙即可
        
        通过telnet 命令进行验证!!!
    
  4. 需要进入容器中手动开启nginx,否则还是没有启动nginx

    地址为   etc/init.d/         执行 **./nginx  start**
    

docker运行nocas

1.pull nacos
2.运行mysql,创建库
3.运行nacos
docker run -d -e PREFER_HOST_MODE=ip -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_MASTER_SERVICE_HOST=127.0.0.1 -e MYSQL_MASTER_SERVICE_PORT=3306 -e MYSQL_MASTER_SERVICE_USER=root -e MYSQL_MASTER_SERVICE_PASSWORD=123456 -e MYSQL_MASTER_SERVICE_DB_NAME=nacos -e MYSQL_SLAVE_SERVICE_HOST=127.0.0.1 -e MYSQL_SLAVE_SERVICE_PORT=3306 -v /opt/dockernacos/logs:/home/nacos/logs -p 8848:8848 --name nacos --restart=always nacos/nacos-server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值