一文Docker篇

Docker

1.安装

https://www.runoob.com/docker/docker-tutorial.html

各个版本都有自行查看

2.docker镜像加速

从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器

  • Docker官方提供的中国镜像库:https://registry.docker-cn.com
  • 七牛云加速器:https://reg-mirror.qiniu.com

上面网址也有加速教程

centos下的步骤:

1.vim /etc/docker/daemon.json

添加:

{"registry-mirrors":["https://registry.docker-cn.com"]}

2.重启:

sudo systemctl daemon-reload
sudo systemctl restart docker

3.检测:

docker info

在这里插入图片描述

3.1 镜像相关命令

  • 查看镜像:docker image

  • 搜索镜像:docker search 镜像名称

  • 拉取镜像:docker pull 镜像名称

  • 删除镜像:docker rmi 镜像ID

    删除所有的镜像:docker rmi docker images -q

3.2 容器相关命令

  • 查看正在运行的容器:docker ps

  • 查看所有容器:docker ps -a

  • 查看最后一次运行的容器:docker ps -l

  • 查看停止容器:docker ps -f status=exited

  • 创建容器常用参数说明:

    -i 表示运行容器

    -t 表示容器启动后进入其命令行

    加入这两个参数后,容器创建就能登陆进去了

    -name 表示为创建的容器命名

    -v 表示目录映射关系(前者是宿主目录后者是映射到宿主机上的目录),最好做目录映射,在宿主机上修改,然后共享到容器上

    -d 在run后面加上 -d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i,-t两个参数,创建后就会自动进去容器)

    -p 表示端口映射 前者是宿主机端口,后者是容器内端口

  • 交互式创建容器:

    docker run -it --name=容器名称 镜像名称:标签 /bin/bash

    可以通过docker ps查看

    exit 可以退出当前容器

  • 守护式创建容器:

    docker run -di --name=容器名称 镜像名称:标签

    登陆守护式容器的方式:

    docker exec -it 容器名称(或者容器ID)/bin/bash

3.3 停止与启动容器

  • 启动容器:

    docker start 容器名称(或者容器ID)

  • 停止容器:

    docker stop 容器名称(或者容器ID)

3.4 文件拷贝

  • 拷贝到容器:

    docker cp file_path 容器名称:容器内path

  • 从容器拷贝:

    docker cp 容器名称:容器目录 save_file_path

3.5 目录挂载

可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样就可以通过修改宿主机某个目录的文件从而去影响容器

详情看-v 参数

docker run -di -v /user/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

如果挂在的是多级目录,可能会出现权限不足的提示。

这时因为centos7中安全模块把权限禁掉了,需要添加参数 --privileged=true来解决挂在的目录没有权限的问题

3.6 查看容器ip

docker inspect 容器名称(容器ID)

3.7删除容器

删除指定容器:docker rm 容器名称(容器ID)

4.1 mysql部署

1.拉取mysql镜像:

docker pull centos/mysql-57-centos7

2.创建容器:

docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-e 表示的是添加环境变量 ,MYSQL_ROOT_PASSWORD是root用户的登录密码

3.进入mysql容器:

docker exec -it ten square_mysql /bin/bash

4.登陆mysql

mysql -u root -p

5.远程登陆

4.2 tomcat 部署

1.拉取镜像

docker pull tomcat:7-jre7

2.创建容器

docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

4.3 Nginx 部署

1.拉取镜像

docker pull nginx

2.创建容器:

docker run -di --name=mynginx -p 80:80 nginx

4.4 redis部署

1.拉取镜像

docker pull redis

2.创建容器:

docker run -di --name=myredis -p 6379:6379 redis

5.1 容器保存为镜像

通过以下命令将容器保存为镜像

docker commit mynginx mynginx_i

5.2 镜像备份

通过以下命令将镜像保存为tar文件

docker save -o mining.tar mynginx_i

5.3 镜像恢复与迁移

为了演示,先删除mynginx_img镜像,然后执行以下命令恢复:

docker load -i mynginx.tar

-i 表示输入的文件

执行后再次查看docker ps可看到镜像已经恢复

6.1 Dockerfile简介

dockerfile是由一系列命令和参数构成的脚本,这些命令应用与基础镜像并最终创建一个新的镜像

  • 对于开发人员,可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员,可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像开始工作
  • 对于运维人员,在部署时,可以实现应用的无缝移植

6.2 dockerfile常用命令

  1. FROM image_name:tag

    定义了使用哪个基础镜像启动构建流程

  2. MAINTAINER user_name

    声明镜像的创建者

  3. ENV key value

    设置环境变量,可以写多条

  4. RUN command

    是dockerfile的核心部分,可以写多条

  5. ADD source_dir/file/dest_dir/file

    将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

  6. COPY source_dir/file/dest_dir/file

    和ADD相似,但是如果有压缩文件并不能解压

  7. WORKDIR path_dir

    设置工作目录

6.3 docker-compose介绍

docker-compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景(集群,快速编排)。

6.4 docker-compose常用命令

  1. docker-compose --version
    产看docker-compose版本

  2. 步骤
    编写Dockerfile,编写docker-compose.yml,执行docker-compose命令

  3. 常用命令
    如果命令后不指定服务名称,则针对yml文件,如果写了具体名称,只针对单个服务。

    3.1 docker-compose build
    构建容器

    3.2 docker-compose up -d
    构建并启动容器

    3.3 docker-compose down
    停止并销毁容器

  4. 例子
    Dockerfile文件有如下内容:
    在这里插入图片描述
    docker-compose.yml文件有如下内容:
    在这里插入图片描述

参数解释:(注意:缩进)
version:版本有1,2,3,目前多用2
service:指定构建的镜像或容器
eureka-serverl1/2为容器名称
build:指定Dockerfile路径
ports:暴露端口(建议写为- "7666:7666",如果纯数字,小于60的端口会解析错误)
mem_limit:容器的内存大小
networks:提前创建好的网络

在docker-coompose.yml文件夹下执行
docker-compose up

7.1 docker私有仓库

1.拉取私有仓库镜像

docker pull registry

2.启动私有仓库容器

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

3.打开浏览器输入地址 http://192.168.184.141:5000/v2/_catalog 看到 {“repositories”:[ ]}表示私有仓库搭建成功并且内容为空

4.修改daemon.json文件

vim /etc/docker/daemon.json

添加以下内容:

{“insecure-registries”:[“192.168.184.141:5000”]}

用于让docker信任私有仓库地址

5.重启docker服务

systemctl restart docker

7.2 镜像上传至私有仓库

1.标记此镜像为私有仓库镜像

docker tag jdk1.8 192.168.184.141:5000/jdk1.8

2.上传标记的镜像

Docker push 192.168.184.141:5000/jdk1.8

8.1 networks命令

  1. 查看网卡信息
    ifconfig
    在这里插入图片描述
    docker0为虚拟网桥,ip是172.17.0.1,掩码是255.255.0.0也就是/16。

作用:

  • 容器间的互联和通信以及端口映射
  • 容器IP变动时可以通过服务名直接进行网络通信而不受到影响
  1. 常用命令
  • 新增:(create)
docker network create van # 创建名为van网络,默认为bridge
  • 删除:(rm,purne)
docker network rm van# 删除单个网络
docker network purne #删除所有无用的网络
  • 查看:(ls)
docker network ls
docker network ls --no-trunc  # 显示完整的网络ID
docker network ls --filter driver=bridge # 驱动程序过滤器根据驱动程序匹配网络。以下示例将网络与桥驱动程序相匹配
docker network ls --filterr id =xxx # 匹配网络ID的全部或部分。需要注意以下自己的ID
docker network ls --format "{
   
   {.ID}}: {
   
   {.Driver}}" # 这里使用不带标题的模板,并输出用冒号分隔所有网络的ID和驱动程序条目
  • 查看网络数据源(inspect)
docker network inspect bridge # 查看网络数据源

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

  • 网络连接(connect,disconnect)
  • 作用:
    用于将容器连接到网络。可以按名称或ID连接容器。 一旦连接,容器可以与同一网络中的其他容器通信。
# 将正在运行的容器连接到网络
docker network connect 网络名 正在运行的容器

# 启动时将容器连接到网络 
docker run -itd --network=网络名 即将启动的容器

# 指定容器的IP地址
docker network connect --ip 10.10.10.10 网络名 容器

# 强制断开容器的网络连接
docker network disconnect 网络名 容器

8.2 networks模式

  1. bridge
#为每一个容器分配、设置IP等,并将容器连接到docker0的虚拟网桥。若没有特别申明,则为默认自带一个IP以及网络设置。(一人一个)
--network bridge #没有进行特殊申明的话默认为docker0
  1. host
#容器不会虚拟出自己的网卡、IP等,而是使用宿主机的IP和端口。(多人一个)
--network host
  1. none
# 容器有自己独立的Network namespace,但是没有进行任何的相关配置。(有,但是空的)
--network none
  1. container
#新创建的容器不会创建自己的网卡,没有自己的IP,也不会进行相应的配置。而是和一个指定的容器共享IP端口范围等。(自己没有,用别人的)
--network container:[容器名或容器ID]
  1. 自定义网络
    如果在启动容器时,不定义network(假设默认是bridge),容器的ip是docker0的网段,虽然两个容器的ip在同一网段,也能通过ip ping通,但是ip会动态变动(一般正式环境不允许把ip写死),所以需要通过容器名ping通,但如果不对容器指定相同的网络,那么就不能通过容器名(服务名)ping通。
    下面是指定自定义网络的步骤:
docker network create van_network
docker run -d -p 8081:8080 --network van_network --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --network van_network --name tomcat82 billygoo/tomcat8-jdk8

#进入tomcat81,查看ip
docker exec -it tomcat81 bash
ip add

#进入tomcat82,查看ip
docker exec -it tomcat82 bash
ip add

#此时,因为使用了自定义网络,ping容器名(服务名)就可以ping通
ping tomcat81
ping tomcat82

#自定义网络本身就维护好了主机名和IP的对应关系,也就是IP和域名都能联通

猜你喜欢

转载自blog.csdn.net/weixin_43676010/article/details/103699668