Docker学习笔记

Docker学习笔记

1.初始Docker

容器技术:解决软件跨环境迁移问题
解决

  • 开发
  • 测试
  • 生产
    环境之间差异,版本+代码
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.1解决不同组件依赖的兼容性问题

在这里插入图片描述

1.2安装Docker

命令行安装即可

1.3Docker架构

  • 客户端:
  • 服务端:镜像和容器
  • 仓库Registry:DockerHUB

在这里插入图片描述

1.3.1镜像

将应用程序及其依赖、环境、配置打包在一起

1.3.2容器

镜像运行起来就是容器,一个镜像可以运行多个容器

1.4Docker换源,换成国内镜像

在这里插入图片描述
在这里插入图片描述

2.Docker命令

可参照菜鸟教程

2.1Docker服务相关命令

2.1.1启动Docker服务

systemctl start docker

2.1.2停止Docker服务

systemctl stop docker

在这里插入图片描述

2.1.3重启Docker服务

systemctl restart docker

在这里插入图片描述

2.1.4查看Docker服务状态

systemctl status docker

在这里插入图片描述

2.1.5开机启动Docker服务

 systemctl enable docker

2.2镜像相关命令

在这里插入图片描述

2.2.1查看本地镜像

docker images

在这里插入图片描述

2.2.2搜索远程镜像

docker search redis

在这里插入图片描述

2.2.3拉取远程镜像

Docker HUB 拉取相关软件的镜像

docker pull redis:3.5(3.5版本号)

在这里插入图片描述

2.2.4删除本地镜像

docker rmi imageid
docker rmi redis:3.5(Image id 重复时)

在这里插入图片描述
删除所有镜像

docker remi `docker images -q`

2.3容器相关命令

2.3.1查看容器

docker ps

在这里插入图片描述
查看所有容器

docker ps -a

2.3.2创建容器

方式1

docker run -i -t --name=c1 redis
-i 保持容器运行
-t 容器退出后自动关闭

方式2

docker run -id --name=c2 redis
-d 守护,后台运行容器
-- name 为容器起名

在这里插入图片描述

2.3.3进入容器

docker exec -it c2 /bin/bash

在这里插入图片描述

2.3.4启动容器

docker start c1

在这里插入图片描述

2.3.5停止容器

docker stop c2

2.3.6删除容器

运行的容器不可以删除

docker rm c2(容器名称)

在这里插入图片描述

docker rm `docker ps -aq`

2.3.7查看容器信息

docker inspect c1

在这里插入图片描述

3.Docker应用部署

3.1MySql部署

在这里插入图片描述端口映射 -p
在这里插入图片描述

3.1.1搜索MySQL镜像

docker search mysql

3.1.2拉取MySQL镜像

去DockerHUb

docker pull mysql:5.6

3.1.3创建容器,设置端口映射、目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3306:3306 \
--name=c_mysql
-v $PWD/conf:/etc/mysql/conf.d\
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6

$PWD:当前路径
docker run :就是创建并运行容器
-- name mn :给容器起个名字叫mn
-v $PWD/conf:/etc/mysql/conf.d :将主机目录下conf/my.cnf挂载到容器的/etc/mysql/my.cnf 配置目录
-p 8080:80 :把宿主机的8080端口映射到容器内的80端口
-e MYSQL_ROOT_PASSWORD=123456:初始化root密码
mysql:5.6 :镜像名称

3.1.4操作容器中的MySQL

docker exec -it c_mysql /bin/bash

登录mysql

mysql -uroot -p123456

在这里插入图片描述

3.2Tomcat部署

3.2.1搜索Tomcat镜像

docker search tomcat

3.2.2拉取Tomcat镜像

docker pull tomcat

3.2.3创建容器,设置端口映射、目录映射

#在/root目录下创建tomcat目录用于存放tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

3.2.4操作容器中的Tomcat

使用外部机器访问Tomcat
在这里插入图片描述

3.3Nginx部署

3.3.1搜索Nginx镜像

docker search nginx

3.3.2拉取Nginx镜像

docker pull nginx

3.3.3创建容器,设置端口映射、目录映射

#在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
#在~/nginx/conf/下创建nginx.conf文件,粘贴下面代码块的内容
vim nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
	
	include /etc/nginx/conf.d/*.conf;
}

创建容器

docker -run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

-p 80:800:将容器的80端口映射到宿主机的80端口
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的/conf/nginx.conf挂载到容器的:/etc/nginx/nginx.conf配置目录
-v $PWD/html:/usr/share/nginx/html:将主机当前目录挂载到容器的/val/log/nginx日

3.3.4操作容器中的Nginx

外部访问Nginx即可

3.4Redis部署

3.4.1搜索Redis

docker search redis

3.4.2拉取redis

docker pull redis:5.0

3.4.3创建容器

docker run -id --name=c_redis -p 6379:6379 redis:5.0

3.4.4测试访问

redis-cli.exe -h 192.168.187.129 -p 6379
-h 192.168.187.129 宿主机的ip地址

4.备份与迁移

5.Dockerfile(构建镜像)

5.1Docker镜像原理与制作

5.1.1原理

复用
分层的文件系统
在这里插入图片描述在这里插入图片描述

5.1.2制作镜像

在这里插入图片描述容器转镜像

docker commit 容器id 镜像名称:版本号

在这里插入图片描述
镜像不可以传输,可以将镜像转换成压缩文件

docker save -o 压缩文件名称 镜像名称:版本号

压缩文件还原成镜像

docker load -i 压缩文件名称

在这里插入图片描述
目录挂载的不生效

5.2DockerFile概念及作用

统一,开发、测试、运维的运行环境
在这里插入图片描述
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

作用
在这里插入图片描述

5.3案例1:定义dockerfile,发布springboot项目

5.3.1springboot项目准备

在这里插入图片描述

5.3.2将项目打包

在这里插入图片描述
根据路径找到打好的文件
在这里插入图片描述在这里插入图片描述

5.3.2将文件传输到虚拟机

  1. 参照别人安装Xshell教程安装
    在这里插入图片描述

  2. 使用rz命令进行查看是否安装了lrzsz程序

  3. 如果没有安装,使用yum -y install lrzsz进行安装

  4. 输入 rz进行文件上传
    在这里插入图片描述

5.3.4将文件移动至dockerfiles目录下

如果没有目录docker-files,先进行创建

mkdir ~/docker-files
mv springboot-hello-0.0.1-SNAPSHOT.jar ./docker-files/

5.3.5编辑dockerfile将jar包添加到镜像中

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER jqqq007 <www.jqqq007.wkl>
  3. 将jar包添加到容器:ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
  4. 定义容器启动执行的命令:CMD java -jar app.jar
  5. 通过dockerfile 构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本
vim springboot_dockerfile  编辑一个文件
添加以上命令

在这里插入图片描述
执行,就可生成镜像

docker build -f ./springboot_dockerfile -t app .

在这里插入图片描述
查看镜像
在这里插入图片描述
通过镜像app,创建运行容器

docker run -id -p 9000:8080 app

访问
在这里插入图片描述

5.4案例2:自定义centos7镜像

要求:

  1. 默认登录路径为/usr
  2. 可以使用vim

5.4.1查看原来的centos7挂载目录

在这里插入图片描述是挂载在根目录/下

5.4.2查看原来的centos7是否带有vim

在这里插入图片描述结果不带

5.4.3开始自定义自己的centos7

创建一个dockerfile

vim centos_dockerfile

添加以下命令

FROM centos:7
MAINTAINER JQ<jq.cn>
RUN yum install -y vim
WORDIR /usr
CMD/bin/bash

RUN yum install-y vim:执行安装vim命令
WORDIR /usr:定义默认的工作目录
CMD/bin/bash:定义容器启动执行的命令

5.4.4构建镜像自己的镜像

通过dockerfile 构建镜像:docker build -f dockerfile文件路径 -t 镜像名称:版本

docker build -f ./centos_dockerfile -t appcentos:1 

5.4.5创建容器执行

在这里插入图片描述

6.Docker服务编排

6.1服务编排概念

在这里插入图片描述

6.2Docker Compose(服务编排工具)

在这里插入图片描述
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

在这里插入图片描述

6.3DockerCompose安装使用

#Compose 目前已经完全支持Linux、MAC OS、Windows,在安装Compose之前,需要先安装Docker。下面以编译好的二进制包方式安装在Linux中
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本信息
docker-compose -version

在这里插入图片描述

卸载dockerCompose

#二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

6.4案例:DockerCompose编排Nginx+springboot项目

6.4.1创建docker-compose目录

mkdir docker-compose/
cd ~/docker-compose

6.4.2编写docker-compose.yml文件

vim docker-compose.yml
version: '3'
services:
  nginx:
   image: nginx
   ports:
    - 80:80
   links:
    - app
   volumes:
   	- ./nginx/conf.d:/etc/nginx/conf.d
  app:
    image: app
    expose:
      - "8080"

6.4.3创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d
cd ./nginx/conf.d

6.4.4在./nginx/conf.d目录下编写itdocker.conf文件

vim itdocker.conf
server {
	listen 80;
	access_log off;
	
	location / {
		proxy_pass http://app:8080;
	}
	
}

6.4.5在~/docker-compose目录下 使用dockers-compose 启动容器

cd ~/docker-compose
docker-compose up

6.4.6测试访问

192.168.56.10:80/hello
在这里插入图片描述

6.4.7错误:services.nginx Additional property app is not allowed

docker-compose up
services.nginx Additional property app is not allowed

此时一定要去检查docker-compose.yml书写格式,特别是缩进格式!

7.Docker容器数据卷

在这里插入图片描述

7.1数据卷的概念及作用

在这里插入图片描述
容器与虚拟机进行目录挂载
解决

  • Docker容器删除后,数据还会存在
  • Docker容器与外部机器之间进行文件交换
  • 容器之间的数据交换

一个容器可以被多个容器进行同时挂载
一个容易也可以被挂载多个数据卷

7.2配置数据卷

在这里插入图片描述

  • 目录必须是绝对路径
  • 目录不存在可以自动创建
  • 可以挂载多个数据卷

7.2.1挂载目录

docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5

挂载多个目录

docker run -it --name=c2 \
-v /root/data:/root/dedadasdad \
-v /root/data2:/root/dadssds

7.2.2多个容器挂载同一个数据卷

在这里插入图片描述

docker run -it --name=c1 -v /root/data/:/root/data_container redis:3.5
docker run -it --name=c2 -v /root/data/:/root/data_container redis:3.5

7.3配置数据卷容器

在这里插入图片描述

7.3.1配置

在这里插入图片描述
自动在宿主机分配一个文件

docker run -it --name=c3 -v /volume redis:3.5
docker run -it --name=c1 --volumes-from c3 redis:3.5
docker run -it --name=c2 --volumes-from c3 redis:3.5

8.Docker私有仓库(管理自己的镜像)

在这里插入图片描述

8.1搭建私有仓库(注意ip变化)

8.1.1拉取私有仓库镜像

docker pull registry

在这里插入图片描述

8.1.2启动私有仓库容器

docker run -id --name=registry -p 5000:5000 registry

8.1.3打开浏览器 访问私有仓库

输入地址https://私有仓库服务器ip:5000/v2/_catalog
看到{“repositories”:[]}表示私有仓库搭建成功
在这里插入图片描述

8.1.4修改deamon.json

vim /etc/docker/daemon.json
#在上述文件中添加一个key,保存退出。
#此步用于让docker信任私有仓库地址
#注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries": ["私有仓库服务器ip:5000"]}

8.1.5重启docker 服务与registry仓库

systemctl restart docker
docker start registry

8.2上传镜像到私有仓库

在这里插入图片描述

8.2.1标记镜像为私有仓库的镜像

docker tag centos:7 私有仓库服务器ip:5000/centos:7

8.2.2上传标记的镜像

docker push 私有仓库服务器ip:5000/centos:7

在这里插入图片描述

在这里插入图片描述

8.3从私有仓库拉取镜像

#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7

在这里插入图片描述

9.Docker容器虚拟化与传统虚拟机比较

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值