Docker学习笔记

Docker学习笔记

1.初始Docker

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

  • 开发
  • 测试
  • 生产
    环境之间差异,版本+代码
    Docker学习笔记

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

Docker学习笔记

1.2安装Docker

命令行安装即可

1.3Docker架构

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

Docker学习笔记

; 1.3.1镜像

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

1.3.2容器

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

1.4Docker换源,换成国内镜像

Docker学习笔记
Docker学习笔记

; 2.Docker命令

可参照菜鸟教程

2.1Docker服务相关命令

2.1.1启动Docker服务

systemctl start docker

2.1.2停止Docker服务

systemctl stop docker

Docker学习笔记

2.1.3重启Docker服务

systemctl restart docker

Docker学习笔记

2.1.4查看Docker服务状态

systemctl status docker

Docker学习笔记

2.1.5开机启动Docker服务

 systemctl enable docker

2.2镜像相关命令

Docker学习笔记

; 2.2.1查看本地镜像

docker images

Docker学习笔记

2.2.2搜索远程镜像

docker search redis

Docker学习笔记

2.2.3拉取远程镜像

Docker HUB 拉取相关软件的镜像

docker pull redis:3.5(3.5版本号)

Docker学习笔记

2.2.4删除本地镜像

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

Docker学习笔记
删除所有镜像
docker remi docker images -q

2.3容器相关命令

2.3.1查看容器

docker ps

Docker学习笔记
查看所有容器
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 为容器起名

Docker学习笔记

2.3.3进入容器

docker exec -it c2 /bin/bash

Docker学习笔记

2.3.4启动容器

docker start c1

Docker学习笔记

2.3.5停止容器

docker stop c2

Docker学习笔记

2.3.6删除容器

运行的容器不可以删除

docker rm c2(容器名称)

Docker学习笔记
docker rm docker ps -aq

2.3.7查看容器信息

docker inspect c1

Docker学习笔记

3.Docker应用部署

3.1MySql部署

Docker学习笔记
Docker学习笔记

; 3.1.1搜索MySQL镜像

docker search mysql

3.1.2拉取MySQL镜像

去DockerHUb

docker pull mysql:5.6

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


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

Docker学习笔记

3.2Tomcat部署

3.2.1搜索Tomcat镜像

docker search tomcat

3.2.2拉取Tomcat镜像

docker pull tomcat

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


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

Docker学习笔记

; 3.3Nginx部署

3.3.1搜索Nginx镜像

docker search nginx

3.3.2拉取Nginx镜像

docker pull nginx

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


mkdir ~/nginx
cd ~/nginx
mkdir conf
cd 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;

    keepalive_timeout  65;

    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原理

复用
分层的文件系统

Docker学习笔记

; 5.1.2制作镜像

Docker学习笔记
docker commit 容器id 镜像名称:版本号

Docker学习笔记
镜像不可以传输,可以将镜像转换成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号

压缩文件还原成镜像

docker load -i 压缩文件名称

Docker学习笔记
目录挂载的不生效

5.2DockerFile概念及作用

统一,开发、测试、运维的运行环境

Docker学习笔记
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

作用

Docker学习笔记

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

5.3.1springboot项目准备

Docker学习笔记

; 5.3.2将项目打包

Docker学习笔记
根据路径找到打好的文件
Docker学习笔记

5.3.2将文件传输到虚拟机

  1. 参照别人安装Xshell教程安装
    Docker学习笔记
  2. 使用 rz命令进行查看是否安装了lrzsz程序
  3. 如果没有安装,使用 yum -y install lrzsz进行安装
  4. 输入 rz进行文件上传
    Docker学习笔记

; 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></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&#x6587;&#x4EF6;&#x8DEF;&#x5F84; -t &#x955C;&#x50CF;&#x540D;&#x79F0;:&#x7248;&#x672C;
vim springboot_dockerfile  编辑一个文件
添加以上命令

Docker学习笔记
执行,就可生成镜像
docker build -f ./springboot_dockerfile -t app .

Docker学习笔记
查看镜像
Docker学习笔记
通过镜像app,创建运行容器
docker run -id -p 9000:8080 app

访问

Docker学习笔记

5.4案例2:自定义centos7镜像

要求:

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

5.4.1查看原来的centos7挂载目录

Docker学习笔记

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

Docker学习笔记

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&#x6587;&#x4EF6;&#x8DEF;&#x5F84; -t &#x955C;&#x50CF;&#x540D;&#x79F0;:&#x7248;&#x672C;

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

5.4.5创建容器执行

Docker学习笔记

; 6.Docker服务编排

6.1服务编排概念

Docker学习笔记

; 6.2Docker Compose(服务编排工具)

Docker学习笔记
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/

Docker学习笔记

6.3DockerCompose安装使用


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

Docker学习笔记

卸载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

Docker学习笔记

; 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容器数据卷

Docker学习笔记

; 7.1数据卷的概念及作用

Docker学习笔记
容器与虚拟机进行目录挂载
解决
  • Docker容器删除后,数据还会存在
  • Docker容器与外部机器之间进行文件交换
  • 容器之间的数据交换

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

7.2配置数据卷

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

; 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学习笔记
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配置数据卷容器

Docker学习笔记

; 7.3.1配置

Docker学习笔记
自动在宿主机分配一个文件
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私有仓库(管理自己的镜像)

Docker学习笔记

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

8.1.1拉取私有仓库镜像

docker pull registry

Docker学习笔记

8.1.2启动私有仓库容器

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

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

输入地址 https://&#x79C1;&#x6709;&#x4ED3;&#x5E93;&#x670D;&#x52A1;&#x5668;ip:5000/v2/_catalog
看到{“repositories”:[]}表示私有仓库搭建成功

Docker学习笔记

; 8.1.4修改deamon.json

vim /etc/docker/daemon.json

{"insecure-registries": ["私有仓库服务器ip:5000"]}

8.1.5重启docker 服务与registry仓库

systemctl restart docker
docker start registry

8.2上传镜像到私有仓库

Docker学习笔记

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

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

8.2.2上传标记的镜像

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

Docker学习笔记

Docker学习笔记

8.3从私有仓库拉取镜像


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

Docker学习笔记

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

Docker学习笔记
Docker学习笔记

Original: https://blog.csdn.net/qq_45498432/article/details/127694965
Author: 学无止境DayDayUp
Title: Docker学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/653378/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球