zoukankan      html  css  js  c++  java
  • docker记录

    docker记录

    1.下载

    1. 手动下载安装

      如果需要手动下载,请点击以下链接下载 StableEdge 版本的 Docker for Mac。

      但是上面的地址是国外的,所以特别慢,推荐阿里云mac下载地址,全部系统的docker镜像地址

    2. 查看docker版本
      在终端中输入: docker --version 显示 Docker version 19.03.8, build afacb8b

    2.配置

    1. 镜像加速

      • 鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,可用镜像地址:

      • 配置

        • 可以在docker客户端配置-->daemon json配置中加一项:"registry-mirrors": ["https://t5t8q6wn.mirror.aliyuncs.com"]
        • 也可以直接找到daemon.json,文件位置一般位于: /etc/docker/ 或者 ~/.docker/ 目录下,修改为:
        	{
        		"registry-mirrors" : ["https://xxxxxx.mirror.aliyuncs.com"]
        	}
        
      • 不同的配置方式

        1. 拉取的时候,指定镜像的全部地址 $ docker pull registry.docker-cn.com/library/ubuntu
        2. 添加"https://registry.docker-cn.com" 到 registry-mirrors 数组在 /etc/docker/daemon.json ,这样中国镜像变成了默认。
        	{
        	  "registry-mirrors": ["https://registry.docker-cn.com"]
        	}
        
        1. 可以配置docker的守护进程--registry-mirror启动参数 $ dockerd --registry-mirror=https://registry.docker-cn.com
    2. 查看配置

      • docker info 查看docker相关信息
    3. 配置dns

      修改.daemon.json 文件来设置全部容器的dns,需要重启docker才能生效

      	{
      		"dns" : [
      			"114.114.114.114",
      			"8.8.8.8"
      		]
      	} 
      
    4. 登录 和github一样,有docker hub,用自己的账号可以在上面建立仓库,存储镜像,

      • docker login 登录
      • docker logout 登出
      • docker push username/ubuntu:18.04 username为你的账号名 ubuntu:18.04为镜像名和tag标签

    3.安装

    在安装镜像之前,我们需要知道各种镜像都有什么版本,可以去官方查看,我们找到对应的软件,然后查看它的tag列表即可,我们安装的时候,可以指明我们需要的tag号 docker pull mysql:5.6, 菜鸟教程里面有个笔记很详细,也可以参考

    3.1安装nginx

    1. 查看可用版本 docker search nginx 命令来查看可用版本
    2. 取最新版的 Nginx 镜像: docker pull nginx:latest
    3. 查看本地是否安装了nginx镜像: docker images
    4. 运行容器: docker run --name test-nginx -p 8080:80 -d nginx:latest
      	--name nginx-test: 容器名称
      	-p 8080:80 端口映射 将本地8080端口映射到容器内部的80端口上
      	-d 加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)
      
    5. 安装成功:访问127.0.0.1:8080 可以看到访问成功界面

    3.2安装php

    1. docker search php

    2. docker pull php:7.0-fpm 默认为: docker pull php:latest

    3. mkdir -p ~/docker/nginx/www

    4. 启动php docker run --name test-php -v ~/docker/nginx/www:/docker/php/www:ro -d php:7.0-fpm

      	--name test-php :将容器名称定义为 test-php
      	-v ~/docker/nginx/www:/docker/php/www 将主机项目中的目录www挂载到容器的www目录
      	-d 后台运行
      

      注意 注意 注意

      • ~/docker/nginx/www 是PHP和nginx的本地目录,要保持php和nginx一致
      • /docker/php/www 是php在容器中的目录,要和下面得default.conf中的fastcgi_param SCRIPT_FILENAME /docker/php/www/$fastcgi_script_name; 一致
      • 配置nginx的容器目录时候 要严格/etc/nginx/conf.d 我原来为了保持一致 写成了/etc/nginx/conf/conf.d 结果打开php页面就一直下载,踩坑半天...
      • 在shell脚本中,用EOF的时候一定要注意default中的变量解析

    3.3nginx和php部署

    1. 创建 ~/docker/nginx/conf/conf.d 目录:mkdir -p ~/docker/nginx/conf/conf.d
      mkdir -p ~/docker/nginx/www

    2. 在该目录下添加 vim ~/docker/nginx/conf/conf.d/default.conf 文件,内容如下:

      server {
          listen       80;
          server_name  localhost;
      
          location / {
              root   /usr/share/nginx/html; #项目的根目录
              index  index.html index.htm index.php;
          }
      
          error_page   500 502 503 504  /50x.html;
          location = /50x.html {
              root   /usr/share/nginx/html;
          }
      
          location ~ .php$ {
              fastcgi_pass   php:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME  /docker/php/www/$fastcgi_script_name;
              include        fastcgi_params;		
          }
      }
      

      配置文件说明:php:9000: 表示 php-fpm 服务的 URL,下面我们会具体说明。
      /docker/php/www/: 是 test-php 中 php 文件的存储路径,映射到本地的 ~/docker/nginx/www 目录。

    3. 启动nginx docker run --name test-nginx -p 80:80 -v ~/docker/nginx/www:/usr/share/nginx/html:ro -v ~/docker/nginx/conf/conf.d:/etc/nginx/conf.d:ro --link test-php:php -d nginx:latest

      	-name 容器的名称
      	-p 端口映射,把本地的80映射到容器的80端口
      	-v 挂载
      	~/docker/nginx/www是本地的html文件目录,/usr/share/nginx/html是容器内html的文件存储目录
      	~/docker/nginx/conf/conf.d是本地的nginx配置文件的目录,/etc/nginx/conf.d是容器内nginx配置文件的目录
      	:ro 表示只读
      	--link test-php:php 把test-php的网络并入到nginx中,并修改nginx的/etc/hosts 把域名php映射成127.0.0.1,让nginx通过php:9000访问php-fpm
      

    3.4安装mysql

    1. docker search mysql
    2. docker pull mysql:5.7
    3. 创建所需目录 data logs conf mkdir -p ~/docker/mysql/data ~/docker/mysql/logs ~/docker/mysql/conf
      data 目录将映射为MySQL容器数据文件存放目录
      logs 目录将映射为mysql容器的日志目录
      conf 目录里的配置文件将映射为mysql容器的配置文件
    4. 创建容器 docker run --name test-mysql -p 3306:3306 -v ~/docker/mysql/data:/docker/mysql/data -v ~/docker/mysql/conf:/etc/mysql -v ~/docker/mysql/logs:/docker/mysql/logs -e MYSQL_ROOT_PASSWORD=123456 --link test-php:php -d mysql:5.7
      -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。 MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。 注意:这里的mysql:后面要加对应的tag 如果不加,他会默认去用latest,如果没有,它回去pull
    5. 进入mysql客户端
      docker run -it --link test-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

    3.5安装phpmyadmin

    1. docker pull phpmyadmin/phpmyadmin这里就按search出来的名字, 一个phpmyadmin会找不到
    2. docker run --name test-phpmyadmin -p 8080:80 --link test-mysql:db -d phpmyadmin/phpmyadmin:latest
    3. 打开127.0.0.1:8080你就可以看到登录界面啦

    3.6 shell脚本 一键安装nmpp

    	```
    	#!/bin/bash
    	#先清除所有容器 要先停止再删除
    	docker stop $(docker ps -q) && docker rm $(docker ps -aq)
    	#首先创建文件夹和文件
    	mkdir -p ~/docker/nginx/www ~/docker/nginx/conf/conf.d
    	mkdir -p ~/docker/mysql/conf ~/docker/mysql/logs ~/docker/mysql/data
    	
    	touch ~/docker/nginx/conf/conf.d/default.conf
    	#写入配置文件
    	cat >> ~/docker/nginx/conf/conf.d/default.conf <<EOF
    	server {
    	    listen       80;
    	    server_name  localhost;
    	
    	    location / {
    	        root   /usr/share/nginx/html; #项目的根目录
    	        index  index.html index.htm index.php;
    	    }
    	
    	    error_page   500 502 503 504  /50x.html;
    	    location = /50x.html {
    	        root   /usr/share/nginx/html;
    	    }
    	
    	    location ~ .php$ {
    	        fastcgi_pass   php:9000;
    	        fastcgi_index  index.php;
    	        fastcgi_param  SCRIPT_FILENAME  /docker/php/www/$fastcgi_script_name; 
    	        include        fastcgi_params;          
    	    }
    	} 
    	EOF
    	#EOF中得变量会被解析 这里$前要加\,这个错误我找了一下午...
    	# EOF 加反斜杠,或用单引号、双引号包围 。适用变量多的情况  <<'EOF'
    	#创建容器
    	docker run --name test-php -v ~/docker/nginx/www:/docker/php/www:ro -d php:7.0-fpm
    	docker run --name test-nginx -p 80:80 -v ~/docker/nginx/conf/conf.d:/etc/nginx/conf.d:ro -v ~/docker/nginx/www:/usr/share/nginx/html:ro --link test-php:php -d nginx:latest
    	docker run --name test-mysql -p 3306:3306 -v ~/docker/mysql/conf:/docker/mysql/conf:ro -v ~/docker/mysql/logs:/docker/mysql/logs:ro -v ~/docker/mysql/data:/docker/mysql/data -e MYSQL_ROOT_PASSWORD=123456 --link test-php:php -d mysql:5.7
    	docker run --name test-phpmyadmin -p 8080:80 --link test-mysql:db -d phpmyadmin/phpmyadmin:latest	
    	```
    

    3.7安装redis

    1. docker search redis
    2. docker pull redis:latest
    3. docker run -itd --name test-redis -p 6379:6379 redis:latest 创建容器
    4. docker exec -it test-redis /bin/bash 然后再执行 redis-cli进入操作界面

    3.8安装redis集群

    参考文档

    4.docker命令集合

    1. 帮助命令

      • docker
      • docker coomand --help
    2. 操作容器

      • docker run -itd --name test-redis -v ~/redis/logs:/logs:ro -P --dns=8.8.8.8 --network test-net redis:latest /bin/bash

        	-i  交互式操作 通常和-t一起使用
        	-t 终端
        	-d 	后台运行容器并返回容器id
        	-p 指定主机和容器的端口映射 端口后面可以加/tcp /udp默认是/tcp
        	-P 随机端口映射
        	-v 绑定一个卷,挂载映射目录
        	--name xxx 为容器指定一个名称
        	--network netName 指定network
        	--dns=8.8.8.8 指定当前容器的dns
        	--link test-mysql:db 添加链接到另一个容器
        	/bin/bash 在容器内执行/bin/bash命令 要退出终端 exit
        
      • docker start/stop/restart container id/container name 对一个或者多个容器进行启动/停止/重启

      • docker attach container id/name 进入容器,但是如果用attach退出容器时,会导致容器停止

      • docker exec container id/name 推荐使用exec进入容器,退出容器终端也不会导致容器停止

    3. 查看容器

      • docker images 查看所有镜像

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

      • docker ps -a查看所有容器,包括未运行的

      • docker ps -q静默模式,只显示容器编号

      • docker ps -l 查看最后一次创建的容器信息

    4. 查看更多容器信息

      • docker port container name/id 查看容器的端口映射情况
      • docker logs -f container name/id 查看容器的内部标准输出 -f 类似 tail -f 来输出容器内部的标准输出
      • docker top container name/id 查看容器内部的进程
      • docker inspect container name/id 查看容器的配置和状态信息,是一个json格式的文件
    5. 删除容器

      • docker rm -f -l - v containerName 删除容器 ,删除容器必须是容器在停止的状态下,否则会报错

        	-f 可以强制删除一个运行中的容器
        	-l 删除容器之间的链接
        	-v 删除与容器相关的卷
        
      • docker contianer prune 清理掉所有处于终止状态的容器

      • docker stop $(docker ps -q) 停止全部运行中的容器

      • docker rm $(docker ps -aq)删除全部容器

      • docker stop $(docker ps -q) && docker rm $(docker ps -aq)一条命令实现停用并删除容器

    6. 导出/导入容器

      • docker export container id/name > xxx.tar 导出容器到本地目录 一定要加 >
      • cat nignx.tar | docker import - imageName:tag 将外部导入到本地镜像,不是容器哦,容器需要通过本地镜像来生成
      • docker import url 也可以导入远程url或某个目录
    7. 更新镜像
      从已经创建的容器中跟新镜像,并提交这个镜像

      • docker run --name old-ubuntu -it ubuntu:15.10 /bin/bash

      • apt-get-updata 在进行的容器中进行更新

      • exit 退出容器

      • docker commit -m "my update" -a="djw" container id image name :tag

        	-m 提交的描述信息
        	-a 指定镜像的作者
        
    8. 创建镜像

      1. vim Dockerfile 创建一个Dockerfile文件

        	FROM    centos:6.7
        	MAINTAINER      Fisher "fisher@sudops.com"
        	
        	RUN     /bin/echo 'root:123456' |chpasswd
        	RUN     useradd runoob
        	RUN     /bin/echo 'runoob:123456' |chpasswd
        	RUN     /bin/echo -e "LANG="en_US.UTF-8"" >/etc/default/local
        	EXPOSE  22
        	EXPOSE  80
        	CMD     /usr/sbin/sshd -D
        	
        	每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
        	第一条FROM,指定使用哪个镜像源
        	RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
        	Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。
        
      2. docker build -t djw-centos6.7 . -t 指定要创建的镜像名 . Dockerfile文件所在目录,可以指定绝对路径

      3. docker run -it djw-centos6.7 /bin/bash

      4. docker tag image id djw-centos6.7:dev 镜像id 镜像源名 新的tag标签

    9. 容器互联

      1. docker network create -d bridge test-net新建网络 -d 指定网络类型,有 bridge overlay
      2. docker run -itd --name test1 --network test-net ubuntu /bin/bash
        docker run -itd --name test2 --network test-net ubuntu /bin/bash
      3. 这样2个容器都在一个网络中,就可以互相ping了,容器之间建立的互联

    5.docker compose

    5.1简介

    • Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
    • 如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程
    • Compose 使用的三个步骤:
      1. 使用 Dockerfile 定义应用程序的环境。
      2. 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
      3. 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

    5.2安装

    mac在安装docke的时候就附带了compose,我们可以查看它是否真的安装docker-compose --version

    6.docker machine

    参考

    7.swarm集群管理

    参考

    8.docker 搭建redis集群

    参考

    • Redis 集群是一个提供在多个 Redis 节点间共享数据的程序集。

    • Redis 集群并不支持处理多个 keys 的命令,因为这需要在不同的节点间移动数据,从而达不到像 Redis 那样的性能,在高负载的情况下可能会导致不可预料的错误.

    • Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令。

    • Redis 集群的优势:

      • 自动分割数据到不同的节点上。
      • 整个集群的部分节点失败或者不可达的情况下能够继续处理命令。
    • Redis 集群没有使用一致性 hash, 而是引入了哈希槽的概念。Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽,集群的每个节点负责一部分 hash 槽。

    1. 下载配置文件,打包好的全部配置 可以直接使用

    2. 要点

      • 多个节点的redis.conf
      • redis.sh /config不需要修改路径
      • docker-compose.yml 文件中的这个地方要更改 /c/project/docker/redis/config 这里要改成你自己的下载文件中config对应的目录路径
      • 下面的错误,就是因为上面没修改导致的The path /c/project/docker/redis/config is not shared from OS X and is not known to Docker. You can configure shared paths from Docker -> Preferences... -> File Sharing. See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info. .
    3. 在 docker-compose.yml目录下执行 docker-compose up -d,如果成功 done

    4. 初始化集群(这一步开始命令须在 redis5.0 及以上版本运行)。

      1. 创建 3 主 3 从的 redis 集群:$ redis-cli --cluster create 192.168.99.100:6391 192.168.99.100:6392 192.168.99.100:6393 192.168.99.100:6394 192.168.99.100:6395 192.168.99.100:6396 --cluster-replicas 1
  • 相关阅读:
    树点涂色
    搜索+DP的一波小水题
    洛谷 P2194 HXY烧情侣
    洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur
    走楼梯升级版(9.8 模拟赛。。。xxy原创)
    洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths
    Tyvj P2207 上学路线route
    cogs 2342. [SCOI2007]kshort
    洛谷 P2740 [USACO4.2]草地排水Drainage Ditches
    洛谷 P1318 积水面积
  • 原文地址:https://www.cnblogs.com/djwhome/p/12774353.html
Copyright © 2011-2022 走看看