Docker一文全解

1.Docker介绍

1.1 Docker架构
  • 镜像(image):就像是一个打包好的软件包。

  • 容器(container):镜像和容器的关系就像是Java里类和对象的关系。镜像是静态的定义,容器是运行的实体。容器可以被创建、启动、停止、删除、暂停。

  • 仓库(repository):仓库可以看成一个代码控制中心,用来保存各种镜像文件,你需要就从仓库去获取。

1.2 Docker核心

一种容器化 的技术,把写好的代码和所需运行环境打包在一起作为一整个服务 ,后续部署直接用这一个服务就好了,解决软件跨环境迁移的问题。

当你需要把所有东西部署到一台新的服务器上时,只需要运行一下这打包的整个服务,不需要一个个去部署安装。

2.Docker使用

2.1 Docker的安装

官网传送门

安装命令

bash 复制代码
#升级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
2.2 Docker命令
docker服务相关命令
bash 复制代码
# 启动docker命令
systemctl start docker
 
# 停止docker命令
systemctl stop docker
 
# 查看docker服务状态
systemctl status docker
 
# 重启docker服务
systemctl restart docker
 
# 设置开机启动docker服务
systemctl enable docker
docker镜像相关命令
bash 复制代码
# 查看本地所有镜像
docker images
 
# 从网络中查找需要的镜像
docker search 镜像名称
 
# 从镜像仓库拉取镜像到本地
docker pull 镜像名称:TAG

其中TAG的版本可以从docker hub找
传送门
https://hub.docker.com/
 
# 删除镜像
docker rmi 镜像名称
docker容器相关命令
bash 复制代码
# 查看正在运行的容器
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或名称>

3.Docker容器数据卷

数据卷的概念:

  • 数据卷是宿主机中的一个目录或文件

  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步

  • 一个数据卷可以被多个容器同时挂载

  • 一个容器也可以被挂在多个数据卷

数据卷的作用

  • 容器数据持久化

  • 外部机器和容器间接通信

  • 容器之间数据交换

简单来说:就是把容器中的数据挂载在一个地方,一般情况下是把数据卷设置在容量大的硬盘目录中。当容器坏了还是怎么了,你硬盘上的数据卷还在,你只需要重新创建一个容器挂载这个数据卷,数据就好了。

配置数据卷

bash 复制代码
# 创建启动容器时,使用 -v参数 设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)
 
注意事项
1. 目录必须是绝对路径
2. 如果目录不存在,则会自动创建
3. 可以挂在多个数据卷 

4.Docker安装常用软件

Docker安装oracle11g
bash 复制代码
# 下载镜像
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

bash 复制代码
# 将数据文件放到容器中
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
相关推荐
曾经的三心草9 分钟前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
Metaphor69210 分钟前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
逍遥浪子~12 分钟前
docker实践(一)
运维·docker·容器
ChinaRainbowSea24 分钟前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程
stormsha25 分钟前
飞算JavaAI炫技赛电商系统商品管理模块的架构设计与实现
java·架构·鸿蒙系统
minh_coo26 分钟前
Spring框架事件驱动架构核心注解之@EventListener
java·后端·spring·架构·intellij-idea
翻滚丷大头鱼34 分钟前
Java 集合Collection—List
java·开发语言
AI云原生1 小时前
如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器的教程
运维·docker·云原生·容器·serverless·firefox·kubeless
敲键盘的肥嘟嘟左卫门1 小时前
StringBuilder类的数据结构和扩容方式解读
java
索迪迈科技2 小时前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法