Docker笔记

一、Dcoker的基本信息
  1. 虚拟机和容器的区别

虚拟机是操作系统级别、容器是进程级别。虚拟机启动时间分钟级别、容器是秒级别、都是为了发布

  1. Docker是一个开源的容器的引擎

    Docker是相互隔离

  2. Docker工作原理

  3. docker分为两部分是C/S结构

    一部分是docker客户端

    一部分是docker守护线程

    首先通过守护进程看有没有镜像、有就创建一个容器、没有就去远程仓库拉取镜像再创建容易

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nM8LPwK2-1617235923355)(https://myorther.oss-cn-shenzhen.aliyuncs.com/IQN3G%29P4%40FG84JI%7E%28R3%40_66.png?Expires=1616670512&OSSAccessKeyId=TMP.3KjthptfhJRNsvnZ5ZVbhZeq9e11bUCktZLoBeXoHC9J7xAFRiEc3LDMf7hw62CsMdji1RVAALbkoNmJTNatkKcRRkxSvV&Signature=eaSlTKduaD7O4ly%2BGtdE5BtWGO0%3D)]

二、安装Docker
  1. 安装Docker依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
  1. 指定docker镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在 /etc/yum.repos.d 下有一个docker-ce.repo文件里面指定了docker版本

  1. 安装Docker

    重新加载repo文件

yum makacache fast

安装

yum -y install docker-ce

​ 查看是否装好 docker info(客户端好了,服务端需要启动)

  1. 修改为阿里云镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnCU6NJb-1617235923362)(F:\mypic\aliyun.png)]

将此段代码直接复制到linux命令行中去

  1. 启动Docker
systemctl start docker
或者开机启动
ststemctl enable docker
  1. 寻找镜像并通过一个镜像跑起来
docker search mysql(要找的镜像)

或者去官方去找https://www.docker.com/

创建容器
docker run --name zoukx-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

--name 容器名字:zoykx-mysql
-p 3306(宿主机):3306(容器)
-e 参数为root MYSQL_ROOT_PASSWORD=root
-d 后台运行
mysql:5.7镜像和版本

首先会去本地找,没有的话就会自动去远程找

停止容器 docker stop 161e4f2d44(容器ID)

删除容器 docker rm -f 161e4f2d44

容器装好了可以直接访问 比如下好了mysql镜像并创建了容器可以通过sqlyong通过ip直接连接

docker run --name zoukx-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
一个容器:通过访问宿主机ip:3306访问容器zoukx-mysql
docker run --name zoukx-mysql99 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
一个容器:通过访问宿主机ip:3307访问容器zoukx-mysql999

一个宿主机的一个进程对应一个容器

三、和镜像的命令
  1. 查询本地所有镜像
docker images
  1. 拉取镜像
docker pull 镜像名[版本(不加默认是最后的版本)]
  1. 删除镜像
docker rmi 镜像ID (没有跑容器的时候才能删掉)
docker rmi -f 镜像ID 强制删除
  1. 修改镜像名称
docker tag 镜像ID 修改后的名字:1.0(版本)
  1. 查询镜像
docker search hell/mysql/...
四、和容器有关的命令
  1. 运行容器

    最简单的 docker run 镜像:版本

进入容器 docker exec -it 容器ID bash
退出容器   exit
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像名称/镜像标识[:版本]
-d:后台运行
-p 宿主机和容器对应的端口
--name 容器名称
-e 环境参数
   如果镜像是官方的去官方看是什么参数
   如果是自定义的容器自己知道是什么参数
-v:数据卷
  1. 查看正在运行的容器
docker ps -a
docker ps -aq
docker ps -a
-a查看所有容器包括没有运行的
-q只看容器的标识
  1. 停止启动容器
停止指定容器 :docker stop 容器ID
重启容器 :docker restart 容器ID
停止启动运行的容器 :docker start 容器ID
停止所有容器:docker stop $(docker ps -q)返回ID
开启所有容器:docker start $(docker ps -aq)返回ID
  1. 查看容器运行日志
docker logs -f 容器ID
-f 可以滚动查看日志
  1. 进入容器的内部
docker exec -it 容器ID bash
exit 退出容器
  1. 从宿主机把文件拷贝到容器
docker -cp 文件名 容器ID:容器内部名称
  1. 删除容器
docker rm -f 容器ID 强制删除(正在开启)
五、数据卷

数据卷:将容器的数据映射到宿主机上面

如果没有数据卷容器删除了数据就没有了,有了数据卷可以删除之后再次创建同数据卷还有原来的数据

  1. 创建数据卷
docker volume create 数据卷名字
默认目录是 /var/lib/docker/ 下的volumes文件
查看数据卷的详情(时间等):docker volume inspect 数据卷名字
查看全部数据卷:docker volume ls
删除数据卷:docker volumn rm 数据卷名字

  1. 容器映射数据卷
通过数据卷名称映射
docker run -v 数据卷名称:容器内部的路径 镜像ID
通过路径映射数据卷
docker run -v 路径:容器内部路径 容器ID

如果数据名称卷映射,如果不存在Docker会自动创建并将容器的内容存储在默认的路径

如果通过路径映射,直接指定一个路径,这个路径必须是

例子:

第一中写法
先创建数据卷
docker volume create 数据卷名字
创建容器带数据卷
docker run --name 容器名字 -e 参数 -p 3306:3306 -v 数据卷名字:/var/lib/文件 -d mysql:5.7

第二种写法
$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

/my/own/datadir宿主机路径
/var/lib/mysql容器路径
六、Dockerfile创建镜像
  1. 在于jar同一目录下创建Dockerfile
vi Dockerfile  必须是这个名字

Dockerfile内容

FROM openjdk:8-jre
ENV HOME /home
run mkdir HOM
COPY ./movie.jar HOME/movie.jar
WORKDIR HOME
ENTRYPOINT java -jar movie.jar


FROM openjdk:8-jre 继承openjdk:8-jre 镜像
ENV HOME /home 环境变量HOME 值为/home
run mkdir HOME 在容器中创建HOME目录
COPY ./movie.jar HOME/movie.jar 把当前目录下的jar赋值到容器中去
WORKDIR HOME 定义容器的工作目录(以后一来打开就是HOME目录)
ENTRYPOINT java -jar movie.jar 容器一来执行的命令

  1. 创建镜像

    执行命令必须和Dockerfile在同一目录下
    docker build -t movie(镜像名字):1.0(版本) .(不能少点)
    
  2. 查看镜像

    docker images
    
    
  3. 创建容器

      ```text
    
      ```
    

docker run -d --name movie -p 8088:8088 movie:1.0/4f4d4f 镜像名或者ID
```

  1. 查看容器
docker ps
  1. 查看容器日志是否有
docker logs -f 容器ID
七、带参数的自定义镜像
  1. springboot打包
java -jar movie.jar --spring.profiles.active=test
  1. 上传最新代码并在部署机上拉取

  2. 打包成最新的jar

mvn clean package -Dmaven.test.skip=true
  1. 把新的jar包cope到和Dockerfile同级目录创建新的镜像

  2. 切换到Dockerfile目录下修改Dockerfile

FROM openjdk:8-jre
ENV HOME /home
ENV profile dev(默认值:重新定义一个环节变量)
run mkdir HOM
COPY ./movie.jar HOME/movie.jar(没改名字可不改)
WORKDIR HOME
ENTRYPOINT java -jar movie.jar --spring.profiles.active=$profile 就是上面的dev(不能写死)

  1. 创建新的镜像
docker build -t movie:2.0 .  (记得最后一个点)
  1. 创建容器
开发环节创建
docker run -d -p 8087:8088 --name moviedev -e profile=dev movie:2.0
测试环境
docker run -d -p 8088:8088 --name movietest -e 
profile=test movie:2.0

端口不一样
里面的application的配置的数据库IP不一样
名字不一样
-e prfile=test/dev 激活的环境不一样
镜像一样
  1. 测试
192.168.25.134:8088/swagger-ui.html
192.168.25.134:8087/swagger-ui.html
八、docker-compos

可以通过docker-compose一键部署多个容器

  1. 下载docker-compose工具
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  1. 用docker-compose编排一个容器
创建一个目录

mkdir -p /usr/docker/docker_compose/new_sql
进入new_sql目录并且创建docker-compose.yaml

编辑docker-compose.yaml

vi docker-compose.yaml

docker-compose.yaml内容为

version: '3.1'
services:
  new_mysql:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: mysql:5.7  # 指定镜像路径                      
    container_name: new_mysql  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
  1. 编排容器
docker-compose up -d
即可开启里面编排的容器
  1. 编排多个容器
version: '3.1'
services:
  fuwu1:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: movie:2.0  # 指定镜像路径                      
    container_name: rongqi1  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
  fuwu2:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    image: movie:2.0  # 指定镜像路径                      
    container_name: rongqi2 # 指定容器名称
    ports:
      - 3309:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷

  1. 编排容器
docker-compose up -d
  1. 卸载容器
docker-compose down
  1. docker-compose其他命令
启动管理的容器
docker-compose up -d
关闭并删除容器
docker-compose down
开启|关闭|重启已经存在的容器
docker-compose start|stop|restart
查看docker-compose管理的容器
docker-compose ps
查看日志
docker-compose logs -f
  1. docker-compose和Dockerdile连用
version: '3.1'
services:
  new_mysql:           # 服务的名称 
    restart: always   # 代表只要docker启动,那么这个容器就跟着一起启动
    build:
      context:../  #指定Dockerfile文件所在路径
      dockerfile:Dockerfile #指定Dockerfile文件名称
    image: mysql:5.7  # 打成镜像之后的名字                 
    container_name: new_mysql  # 指定容器名称
    ports:
      - 3308:3306   #  指定端口号的映射
    environment:
      MYSQL_ROOT_PASSWORD: root   # 指定MySQL的ROOT用户登录密码
      TZ: Asia/Shanghai        # 指定时区
    volumes:
     - ./data:/var/lib/mysql   # 映射数据卷
九、harbor

harbor是一个用于存储和分发Docker镜像的企业级Registry服务器

就像maven的私服 将镜像上传并可以自己下载还可以给其他人使用

  1. 下载
https://github.com/goharbor/harbor
  1. 克隆一个虚拟机

以有docker的虚拟机为父机来克隆 就不要重新装docker了

  1. 将压缩包解压
tar -zxvf habor.tgz.tar
  1. 进入harbor文件

  2. 修改harbor下的harbor.yml文件

修改 reg.mydomain.com
改为: 安装harbor的IP
  1. 关闭防火墙
systemctl stop firewalld
  1. 开启docker
start docker
  1. 执行当前目录下的install.sh
./install.sh
  1. 到浏览器输入安装harbor的IP地址检验

默认登录账户密码是 admin Harbor12345

  1. 新建项目

  2. harbor命令

启动 docker-compose start
停止 docker-compose stop
重启 docker-compose restart
可以通过编排的方式启动harbor

  1. 连接harbor

在需要连接harbor的虚拟机上目录下的/etc/docker

编辑daemon.json加上镜像私服

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "192.168.0.136"(部署harbor的机器IP)
  ]
}

  1. 重启或者启动docker
确保修改生效
重启docker
systemctl restart docker
启动docekr
systemctl start docker
  1. 确保要连接的机器开启了docker和关闭了防火墙

  2. 登录私服

docker login 192.168.0.136(部署私服的IP) -u admin -p Harbor
  1. 把镜像上传到私服
编辑想要传的镜像
docker tag 镜像id 192.168.0.136(部署及IP)/movie(harbor创建的项目名)/镜像名:2.0

推送镜像

docker push 标记的镜像名:版本
docker push (192.168.0.136/movie/movie)(名字):2.0
  1. 拉取镜像
复制harbor项目下的命令并执行即可拉取
docker pull 192.168.0.136/movie/movie:2.0

十、Jenkins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值