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%\docker\config\daemon.json(Windows)来配置 # 在配置文件中加入(没有该文件的话,先建一个): data-root可以用来指定镜像/容器等的存储位置
{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
"data-root": "/data/docker-data",
"storage-driver": "overlay2"

}

# 如果要使用代理访问docker外网仓库,需要专门配置代理文件
# 新建目录和文件/etc/systemd/system/docker.service.d/http-proxy.conf
# 在文件中添加以下内容,主要是确定PROXY地址端口正确。
[Service]
Environment="HTTPS_PROXY=http://ip:port"
Environment="HTTP_PROXY=http://ip:port"
Environment="NO_PROXY=localhost,127.0.0.1"

 # 然后 重新载入配置

systemctl stop docker
systemctl daemon-reload
systemctl start docker
docker info
systemctl show --property=Environment docker

  

# 如果要删除 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

 

posted @ 2019-09-05 16:02  枫若雪  阅读(315)  评论(0编辑  收藏  举报