镜像(image):就像是一个打包好的软件包。
容器(container):镜像和容器的关系就像是Java里类和对象的关系。镜像是静态的定义,容器是运行的实体。容器可以被创建、启动、停止、删除、暂停。
仓库(repository):仓库可以看成一个代码控制中心,用来保存各种镜像文件,你需要就从仓库去获取。
一种容器化的技术,把写好的代码和所需运行环境打包在一起作为一整个服务,后续部署直接用这一个服务就好了,解决软件跨环境迁移的问题。
当你需要把所有东西部署到一台新的服务器上时,只需要运行一下这打包的整个服务,不需要一个个去部署安装。
安装命令
#升级yum
sudo yum update
#卸载旧版本
yum remove docker docker-common docker-selinux docker-engine
#安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum缓存
yum makecache fast
# 安装Docker
yum -y install docker-ce
# 启动
systemctl start docker
# 查看是否启动成功
docker info
# 开机自启
systemctl enable docker
# Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the d
systemctl restart docker #重启一下就行
# 在下载镜像前,需要设置一下国内源,用来提高下载速度
sudo vim /etc/docker/daemon.json
# 配置
{
"registry-mirrors": ["https://d7grpode.mirror.aliyuncs.com"]
}
# 重启
systemctl restart docker
# 启动docker命令
systemctl start docker
# 停止docker命令
systemctl stop docker
# 查看docker服务状态
systemctl status docker
# 重启docker服务
systemctl restart docker
# 设置开机启动docker服务
systemctl enable docker
# 查看本地所有镜像
docker images
# 从网络中查找需要的镜像
docker search 镜像名称
# 从镜像仓库拉取镜像到本地
docker pull 镜像名称:TAG
其中TAG的版本可以从docker hub找
传送门
https://hub.docker.com/
# 删除镜像
docker rmi 镜像名称
# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 创建并启动容器
docker run 参数
参数说明:
- -i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后自动进入容器,退出容器后,容器自动关闭
- -t:为容器重新分配一个伪输入终端。
- -d:以守护(后台)模式运行容器。
- --name:为创建的容器命名
# 进入容器
docker exec 参数 # 退出容器,容器不会关闭
# 停止容器
docker stop 容器名称
# 启动容器
docker start 容器名称
# 删除容器
docker rm 容器名称
# 查看容器信息
docker inspect 容器名称
# 设置容器开机自启
sudo docker update --restart=always <容器ID或名称>
# 关闭容器开机自启
sudo docker update --restart=no <容器ID或名称>
数据卷的概念:
数据卷是宿主机中的一个目录或文件
当容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂在多个数据卷
数据卷的作用
容器数据持久化
外部机器和容器间接通信
容器之间数据交换
简单来说:就是把容器中的数据挂载在一个地方,一般情况下是把数据卷设置在容量大的硬盘目录中。当容器坏了还是怎么了,你硬盘上的数据卷还在,你只需要重新创建一个容器挂载这个数据卷,数据就好了。
?配置数据卷
# 创建启动容器时,使用 -v参数 设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)
注意事项
1. 目录必须是绝对路径
2. 如果目录不存在,则会自动创建
3. 可以挂在多个数据卷
# 下载镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
# 查看镜像是否下载成功
sudo docker images
# 创建挂载文件
sudo mkdir -p /home/oracle/oradata
# 授权,不授权会导致后面安装失败
sudo chmod 777 /home/oracle/oradata
# 安装oracle
sudo docker run -d \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /home/oracle/oradata:/opt/oracle/oradata \
--name oracle11g \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
# 查看启动日志
sudo docker logs -ft oracle11g
# ORACLE设置
sudo docker exec -it oracle11g /bin/bash
su root
密码:helowin
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
su - oracle
sqlplus /nolog
conn /as sysdba
alter user system identified by system;
alter user sys identified by sys;
create user bw identified by 密码;
grant connect,resource,dba to 用户名;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
alter system set processes=2000 scope=spfile;
select * from dba_users t where t.username = '用户名';
# 启动docker oracle命令
sudo docker start oracle11g
# 设置容器开机自启
sudo docker update --restart=always oracle11g
# 关闭容器开机自启
sudo docker update --restart=no <容器ID或名称>
注意服务名是helowin
# 将数据文件放到容器中
sudo docker cp /home/xxx.dmp oracle11g:/opt/oracle/oradata/xxx.dmp
# 进入正在运行的Docker容器的命令行界面。使用以下命令:
sudo docker exec -it oracle11g bash
su root
密码:helowin
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
su - oracle
sqlplus /nolog
conn /as sysdba
# 使用命令行导入数据
# 查询已存在的数据泵目录:
SELECT directory_name FROM dba_directories;
# 导入文件
imp 用户名/密码@helowin file=/opt/oracle/oradata/xxx.dmp full=y ignore=n
# 导出数据
sudo docker exec -it oracle11g bash
su root
密码:helowin
su - oracle
exp 用户名/密码 owner=用户名 file=/opt/oracle/oradata/xxx.dmp log=/opt/oracle/oradata/xxx.log
# 可能会遇到表空间不足,可以看导出日志
# 错误信息
————————————————
EXP-00008: ORACLE error 29516 encountered
ORA-29516: Aurora assertion failure: Assertion failure at joez.c:3311
Bulk load of method java/lang/Object. failed; insufficient shm-object space
ORA-06512: at "SYS.DBMS_JAVA", line 139
EXP-00000: Export terminated unsuccessfully
————————————————
# 解决方法
SQL 执行
alter system set java_jit_enabled=false