• docker 笔记


    整理一下 docker 的笔记。内容不多,便于速查。

    docker 只是容器,并非虚拟机,很大程度上还得依赖宿主OS。

    比如:镜像 microsoft/dotnet-framework就不能在Linux下运行,拉取时会有相应的提示。

    相对来说,运行在Linux环境则稳定/高效,对Windows环境不太好。并且Windows需要开启 vt-x 或AMD-v 指令才能使用。

    1. 安装 (centos 7)

    # 1. 检查有无安装docker
    yum list installed |grep docker 
    
    # 2. 安装依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 3. 添加软件源信息
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # 4. 更新 yum 缓存
    yum makecache fast
    
    # 5. 安装docker
    yum -y install docker-ce
    
    # 6. 启动
    systemctl start docker
    systemctl enable docker # 设为开机启动 #
    7. 检查进程 ps -ef |grep docker # 鉴于国内网络问题,后续拉取 Docker 镜像缓慢,需要配置加速器,使用网易的镜像地址:http://hub-mirror.c.163.com # 新版的 Docker 使用 /etc/docker/daemon.json(Linux)或者 %programdata%dockerconfigdaemon.json(Windows)来配置 # 在配置文件中加入(没有该文件的话,请先建一个):
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    
    
    # 删除 Docker CE
    yum remove docker-ce
    rm -rf /var/lib/docker

    2. 容器与镜像

    ## 容器与镜像的关系,好比编程中“对象”与“类”的关系
    
    # ------------------------ docker cmd ----------------------------------
    # 内部命令很多情况下,操作ID或NAMES都是一样的
    
    docker       # 获取帮助
    
    docker run hello-world    # 拉取并启动镜像
    
    docker image ls          # 本地镜像
    docker images            # 本地镜像
    
    docker pull training/webapp  # 拉取某镜像
    
    docker search redis          # 搜索镜像  OFFICIAL [OK] 为官方版本
    
    docker pull ubuntu:13.10     # pull 或 run 也可以指定TAG版本
    
    # 使用镜像创建容器
    docker run -d -P training/webapp python app.py   
    #    -d:让容器在后台运行。
    #    -P:将容器内部网络端口映射到主机随机端口上
    
    docker ps               # 是否有容器在运行
    #     PORTS 0.0.0.0:32768->5000/tcp 表示外部32768映射到容器内5000端口
    
    # 也可以通过 -p 参数来指定IP和端口
    docker run -d -p 5000:5000 training/webapp python app.py
    docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
    # 随机生成容器名称。也可以 --name 指定名称
    docker run -d -p 6379:6379 --name my_redis redis
    
    
    # 可通过ID或名称查看端口
    docker port 98a243b215c7
    docker port determined_bhabha
    
    docker logs -f 98a243b215c7          # 应用程序日志
    
    docker top 98a243b215c7              # 容器的进程
    
    docker inspect determined_bhabha     # 容器配置和状态
    
    docker stop determined_bhabha        # 停止应用容器
    docker stop 98a243b215c7             # 或
    
    docker ps -l                         # 查询最后一次创建的容器
    
    docker start 98a243b215c7            # 再次启动容器
    docker restart 98a243b215c7          # 重启容器
    
    docker rm 98a243b215c7               # 删除容器 必须先stop
    docker rmi 6fae60ef3446              # 删镜像 必先删对应容器,且只能用ID

    3. 几个应用示例:

    ##------------------------ docker redis --------------------------------
    docker search redis
    docker pull redis:3.2
    docker images
    
    docker run -p 6379:6379 -v /rdsdata:/data -d redis:3.2 redis-server --appendonly yes
    # -v /rdsdata:/data : 将主机中/rdsdata挂载到容器的/data
    # redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
    
    docker exec -it 6aa89bf8343a redis-cli  # 进入redis cli
    > info
    > CONFIG GET *
    
    ##------------------------ docker nginx --------------------------------
    # 1. 拉取并测试启动
    docker pull nginx
    docker run --name dk_nginx -p 80:80 -d nginx
    
    # 2. 创建映射目录
    mkdir -p /nxdata/logs /nxdata/conf /nxdata/www
    # www: 目录将映射为 nginx 容器配置的虚拟目录。
    # logs: 目录将映射为 nginx 容器的日志目录。
    # conf: 目录里的配置文件将映射为 nginx 容器的配置文件。
    
    # 3. 编辑并保存配置文件
    docker ps 
    docker cp dk_nginx:/etc/nginx/nginx.conf /nxdata/conf/ 
    # 拷贝容器内 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;
        }
    
    
    # 4. 重新部署
    docker stop dk_nginx
    docker rm dk_nginx  # 停止并删除旧容器
    
    docker run -d -p 80:80 --name mynginx -v /nxdata/www:/usr/share/nginx/html 
      -v /nxdata/conf/nginx.conf:/etc/nginx/nginx.conf 
      -v /nxdata/logs:/var/log/nginx nginx
    #    -v /nxdata/www:/usr/share/nginx/html    将创建的 www 目录挂载到容器的 /usr/share/nginx/html
    #    -v /nxdata/conf/nginx.conf:/etc/nginx/nginx.conf   将创建的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf
    #    -v /nxdata/logs:/var/log/nginx    将创建的 logs 挂载到容器的 /var/log/nginx
    
    # 5. 在 /nxdata/www 下放入index.html文件后,浏览器访问测试
    
    docker kill -s HUP mynginx     # 重新载入 nginx (STATUS 不变)
    docker restart mynginx         # 重启 NGINX 容器 (STATUS 重新开始)
    
    
    # ------------------------- docker php ---------------------------------
    # 1. 拉取镜像
    docker pull php:5.6-fpm
    
    # 2. 先启动 php-fpm
    docker run --name myphp -d -v /nxdata/www:/var/www/html:ro php:5.6-fpm
    # /nxdata/www是本地 php 文件的存储目录,/var/www/html是容器内 php文件目录,ro 表只读
    
    # 3. 添加本地配置文件/nxdata/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  /var/www/html/$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    
    
    # 4. 启动nginx并连接PHP
    docker run --name mynginx -p 81:80 -d 
      -v /nxdata/www:/usr/share/nginx/html:ro 
      -v /nxdata/conf/conf.d:/etc/nginx/conf.d:ro 
      --link myphp:php nginx
    # --link myphp:php 把 myphp 的网络并入mynginx , 并通过修改 mynginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm
    
    # 5. 添加/nxdata/www/index.php文件并测试访问 http://host:81/
    <?php
        phpinfo();
    
    
    # ------------------------- docker mariadb -------------------------------
    docker pull mariadb:5.5.64
    # TAG可以在hub.docker.com中点击项目后查看
    
    # 1. 创建本地映射目录
    mkdir -p /nxdata/mariadb/data /nxdata/mariadb/logs /nxdata/mariadb/conf
    
    # 2. 配置文件 /nxdata/mariadb/conf/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    symbolic-links=0
    innodb_file_per_table=1
    innodb_buffer_pool_size = 1G
    
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid
    
    !includedir /etc/my.cnf.d
    
    # 3. 启动容器
    docker run -p 3306:3306 --name maria -v /nxdata/mariadb/conf:/etc/mysql/conf.d 
      -v /nxdata/mariadb/logs:/logs -v /nxdata/mariadb/data:/data 
      -e MYSQL_ROOT_PASSWORD=123456 -d --link myphp mariadb:5.5.64  
    #    -v /nxdata/mariadb/conf:/etc/mysql/conf.d 挂载配置文件(容器中路径不对则不生效)
    #    -e MYSQL_ROOT_PASSWORD=123456  初始化 root 用户的密码
    
    # 4. 使用cli连接  也可以使用工具连接(如Navicat)
    docker run -it --link maria:mariadb mariadb:5.5.64 sh -c 'exec mysql -hmaria -P3306 -uroot -p123456'
    #   --link 连接到容器maria并命名为mariadb  后跟镜像名
    #   sh -c 用来执行命令
    
    # 测试SQL命令:show variables like '%per_table%';   show databases;
    
    # 如果需要,也可以安装使用 phpmyadmin
    docker run --name myadmin -d --link maria:db -p 82:80 phpmyadmin/phpmyadmin
    # 测试访问 http://host:82/
    
    
    # ------------------------ docker mongodb ------------------------------
    docker search mongo
    docker pull mongo
    
    # 目录如果没有会自动创建
    docker run -p 27017:27017 -v /nxdata/mongodb:/data/db -d mongo
    
    docker run -it mongo mongo --host 172.17.0.1    # shell
    

    # ---------------------------- onlyoffice ----------------------------- docker run -i -t -d -p8000:80 --restart=always onlyoffice/documentserver -i 以交互模式运行容器,通常与 -t 同时使用; -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -d 后台运行容器,并返回容器ID; --restart=always 当 docker 重启时,容器自动启动。 # 更换服务器,镜像的导出导入: docker images # 查看镜像 docker save 61f7051ea308 > /opt/onlyoffice.tar # 导出镜像 scp onlyoffice.tar 192.168.6.12:/opt/ # 远程拷贝
    docker load < /opt/onlyoffice.tar      # 新机器载入
    docker images                # 查看镜像id
    docker tag 61f7051ea308 onlyoffice/documentserver:latest    # 修改名称和tag
    docker run -i -t -d -p8000:80 --restart=always onlyoffice/documentserver  # 运行

    ORACLE

    #------------------------------- docker oracle11g --------------------------------
    # https://blog.csdn.net/qq_38380025/article/details/80647620
    
    docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    docker run -d -p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    docker start oracle11g
    
    
    # 进入镜像 shell 进行配置
    docker exec -it oracle11g bash
    su root  # 密码:helowin
    
    # vi /etc/profile
    export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 
    export ORACLE_SID=helowin 
    export PATH=$ORACLE_HOME/bin:$PATH
    export LANG=zh_CN.UTF-8
    export NLS_LANG="SIMPLIFIED CHINESE_CHINA".ZHS16GBK
    
    source /etc/profile
    ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
    
    # 编辑此文件,添加以下内容:
    vi /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/tnsnames.ora
    
    docker_oracle11 = 
    (DESCRIPTION = 
      (ADDRESS_LIST = 
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT =1521))
      )
      (CONNECT_DATA =
        (SERVICE_NAME = helowinXDB)
      )
    )
    
    
    su - oracle  # 中间的 - 不能少
    
    
    sqlplus /nolog
    conn /as sysdba
        alter user system identified by system;
        alter user sys identified by sys;
        # 也可以创建用户  create user test identified by test;
        # 并给用户赋予权限  grant connect,resource,dba to test;
        
    # 当执行修改密码的时候出现 : database not open
    # 输入:alter database open;
    # 也许还会提示 : ORA-01507: database not mounted
    # 输入: alter databasemount;
    # 输入: alter database open;
    # 然后就可执行 修改数据库密码的命令了
    # 改完之后输入:ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;  # 刷新下表
    
    
    # 更改编码,支持中文
    # 注意,一定要事先备份数据。
    select userenv('language') from dual;
    # select * from nls_database_parameters where parameter in ('NLS_CHARCTERSET','NLS_NCHAR_CHARACTERSET');
    SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';
    shutdown immediate;
    startup;
    alter session set sql_trace=true;
    alter system enable restricted session;
    show parameter job_queue_processes;
    alter system set job_queue_processes=0;
    alter system set aq_tm_processes=0;
    alter database character set INTERNAL_USE ZHS16GBK;
    update props$ set VALUE$='ZHS16GBK' where NAME='NLS_NCHAR_CHARACTERSET';
    shutdown immediate;
    startup;
    
    # exit 退出 sql 连接
    
    docker restart 容器id
    
    # PL/SQL 需要在win10系统中添加环境变量:
    # NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    # 需要在首选项,连接,配置oracle主目录及 oci.dll 的路径
    
    
    
    
    # ------------------------ docker: oracle 12 c -------------------------------
    docker pull absolutapps/oracle-12c-ee
    mkdir -p /data/oracle   # 建立本地映射目录
    
    # 创建容器。 privileged使容器内的root拥有真正的root权限
    docker run -d -p 8080:8080 -p 1521:1521 -v /data/oracle:/u01/app/oracle --privileged --name oracle12c absolutapps/oracle-12c-ee
    
    # 检查是否创建成功
    docker logs -f oracle12c   # 查看一下日志,一定要等待100% complete
    
    # 进入容器内部
    docker exec -it oracle12c /bin/bash
    su oracle
    
    sqlplus / as sysdba
    SQL> conn system/oracle as sysdba;
    
    alter user system identified by oracle;
    alter user sys identified by sys;
    
    ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
    
    create user test identified by test;
    grant connect,resource,dba to test; 
    
    # 可以使用PL/SQL连接了
    # http://ip:port/em   使用数据库的账密登录 
    
    # lsnrctl 控制台 (必须以oracle身份操作)
    help
    stop
    start
    reload
    
    
    # 查询
    select * from rownum <= 100
    
    # MATERIALIZED VIEW  # 物化视图,以前叫快照
    
    # --------------------------- EXP ---------------------------
    # 备份远程用户的全部东西到本地
    exp ckmes/qt#it2012@10.170.1.57/QTSOFT buffer=64000 file=d:ckmes.dmp owner=ckmes
  • 相关阅读:
    Fetch the result from result set
    Variable shadowing
    What is Servlet Container
    What is a servletcontext
    Inner Class
    Java中HashMap和TreeMap的区别深入理解
    枚举类
    (转载) 安卓开发学习笔记
    【C和C++】停车场系统
    【算法】常用的排序方法
  • 原文地址:https://www.cnblogs.com/frx9527/p/docker.html
Copyright © 2020-2023  润新知