Docker备忘

Bocker备忘

Doker使用目录

    • 1. DockerHub官方镜像搜索
    • 2. Ubuntu安装Docker
    • 3. Docker拉取Pull太慢
      • 3-1 如Ubuntu解决如下:
    • 4. Docker删除镜像
      • 4-1. 删除容器
      • 4-2. 删除镜像
    • 5. Docker修改已启动容器的端口映射
      • 5-1 先提交镜像,再重新Run一个容器
    • 6. 宿主机和Docker容器之间的文件拷贝
      • 6-1、从容器里面拷文件到宿主机
      • 6-2、从宿主机拷文件到容器里面
    • 7. Docker设置容器的开机自启
    • 8. Docker安装一个镜像并运行实例[Oracle19C]
    • 9. Docker 将容器打包成镜像以及导入导出
      • 9-1 打包镜像的语法格式:
      • 9-2. 导入&导出
        • 9-2-1 导入
        • 9-2-2 导出【镜像打包】
    • 10. Docker常用指令
      • 10-1 docker 基础命令
      • 10-2 docker 帮助命令
      • 10-3. docker 镜像命令
      • 10-4 docker 容器命令
      • 10-5 自己提交一个镜像
      • 10-6 docker 运维命令

1. DockerHub官方镜像搜索

DockerHub官方镜像网址

2. Ubuntu安装Docker

1、安装docker:sudo apt-get install -y docker.io
2、启动docker服务:systemctl start docker
3、设置开机启动:systemctl enable docker
4、查看docker状态:systemctl status docker
5、停止docker服务:systemctl stop docker
6、查看docker版本:docker version
【】-- 非root用户运行docker
1、添加docker用户组:sudo groupadd docker
执行以上命令会提示已存在,原因是在安装docker时已自动创建。
2、将指定用户添加到用户组(username为你的用户名):sudo gpasswd -a username docker
3、查看是否添加成功:cat /etc/group | grep ^docker
3、重启docker:sudo systemctl restart docker
5、更新用户组:newgrp docker
6、执行docker命令,比如:docker ps -a

3. Docker拉取Pull太慢

参考链接: 各种Linux解决Docker拉去Pull慢的问题

3-1 如Ubuntu解决如下:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4. Docker删除镜像

4-1. 删除容器

docker ps #查看正在运行的容器
docker ps -a #查看所有容器
docker rm container_id或容器名

4-2. 删除镜像

docker images //查看镜像
docker rmi image_id

5. Docker修改已启动容器的端口映射

参考链接
比如已经Docker Run一个容器了,如下::

每个端口映射都加一个-p
docker run -itd --name mytomcat -p 8081:8081 -p 3306:3306 --privileged centos:latest /usr/sbin/init

5-1 先提交镜像,再重新Run一个容器

1. docker ps -a
2. docker commit newname_mytomcat mytomcat
3. docker run -itd --name newname_container -p 8081:8080 -p 3306:3306 --restart=always --privileged newname_mytomcat /usr/sbin/init

6. 宿主机和Docker容器之间的文件拷贝

6-1、从容器里面拷文件到宿主机

在宿主机里面执行以下命令:
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
如: docker cp nginx:/usr/share/html/index.html /usr/local

6-2、从宿主机拷文件到容器里面

在宿主机里面执行如下命令:
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
如: docker cp /usr/local/index.html nginx:/usr/share/html

7. Docker设置容器的开机自启

1.设置docker的开机自启
systemctl enable docker
2.设置容器的自动启动 -- 两种情况
	2.1 创建容器时设置
	docker run -d --restart=always --name 设置容器名 使用的镜像
	2.2 已经创建的容器,若创建时未指定 --restart=always,可通过update 命令修改
	docker update --restart=always 容器ID(或者容器名)

8. Docker安装一个镜像并运行实例[Oracle19C]

1. docker search oracle19c
2. #拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
3. # 创建目录  该目录为宿主机挂载目录,后续Oracle相关配置或文件这里修改即可
mkdir -p /mydata/oracle/oradata
# 授权文件夹权限
chmod 777 /mydata/oracle/oradata
4. # 运行容器 ******注意: 这里run成功后,oracle19c正在安装,
   # 不要docker exec -it oracle19c /bin/bash 进入容器
   # 可以通过命令查看安装进度: docker logs -ft oracle19c
   # 安装时间比较长,过程中可以通过日志监控安装情况 
docker run -d  \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=ORCL \
-e ORACLE_PDB=ORCLPDB \
-e ORACLE_PWD=orcl \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=ZHS16GBK \
-v /mydata/oracle/oradata:/opt/oracle/oradata \
--name oracle19c \
registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c
5. # 安装时间比较长,过程中可以通过日志监控安装情况
docker logs -ft oracle19c
# 看到下图XDB initialized. 说明安装完成,可以按  Ctrl + C 退出界面;
# ![安装完成如图示](https://img-blog.csdnimg.cn/107b6f10d23f476db767b15890571fff.jpeg#pic_center)

6. #打开容器终端
docker exec -it oracle19c /bin/bash
#sqlplus登录
#sysdba身份登录,默认进入CDB
sqlplus / as sysdba
#进入CDB
sqlplus system/orcl@localhost:1521/orcl
#进入PDB
sqlplus pdbadmin/orcl@localhost:1521/orclpdb
#查看连接模式
SQL>show con_name

至此,可以使用plsql等客户端工具连接测试了
若连接数据库时报错:ORA-28040:No matching authentication protocol
这是因为Oracle19C版本过高,客户端工具版本太低,解决方法如下:

在Docker容器的Oracle用户下【或宿主机直接访问挂载的路径: /mydata/oracle/oradata 】,将%ORACLE_HOME%/network/admin/sqlnet.ora文件(如果没有sqlnet.ora文件,那么就创建一个)最后添加如下的行:
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
重启下Docker容器应该就解决了
docker restart oracle19c
登录容器,重新修改下密码:如sys、system等
docker exec -it oracle19c /bin/bash 
sqlplus / as sysdba 
alter user sys identified by 123456;
alter user sys identified by 123456;
接下来,PlSql等客户端直接配置Ip、端口号、实例名[ORCLPDB],就可以直接访问了;
连接参考-- sqlplus pdbadmin/orcl@localhost:1521/orclpdb

9. Docker 将容器打包成镜像以及导入导出

使用docker commit命令,可以从容器创建一个新的镜像。
执行前,建议先停止容器:

docker stop 容器Id或容器名[如:oracle19c]

9-1 打包镜像的语法格式:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS参数说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停

实例:
1. docker stop 2a2a11e2c043[或容器名 oracle19c]
2. docker commit -a "Zhaof" -m "这是测试打包一个在用容器的镜像" 2a2a11e2c043 镜像名[如:oracle19c_new:v1]

9-2. 导入&导出

9-2-1 导入
## 在镜像包所在的文件夹下操作,其他路径操作,需带上testLoad.tar的绝对路径
docker load --input  testLoad.tar    
或者  docker load -i testLoad.tar
或者  docker load < testLoad.tar
9-2-2 导出【镜像打包】
# 把自己commit的镜像 oracle19c_new:v1 导出到指定的路径,名为 testLoad.tar
docker save > /root/docker_images/testLoad.tar oracle19c

docker images  --可以看到【oracle19c_new:v1】的镜像
# 使用导入的镜像oracle19c_new:v1, 运行一个容器my_oracle19c_new_v1
docker run -it -d --name my_oracle19c_new_v1 -p 1521:1521 oracle19c_new:v1

10. Docker常用指令

10-1 docker 基础命令

# 启动docker
systemctl start docker
# 关闭docker
systemctl stop docker
# 重启docker
systemctl restart docker
# docker设置开机启动
systemctl enable docker
# 查看docker 运行状态
#  ------如果是在运行中 输入命令后 会看到绿色的active
systemctl status docker
# 查看docker 版本号信息
docker version
docker info

10-2 docker 帮助命令

# 如果忘记了某些命令便可使用此进行查看与回顾
docker --help
比如忘记了 拉取命令 不知道可以带哪些参数 这样使用
docker pull --help

10-3. docker 镜像命令

查看自己服务器中docker 镜像列表

docker images
# 搜索镜像
docker search 镜像名
docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像
# 拉取镜像 不加tag(版本号) 即拉取docker仓库中 该镜像的最新版本latest 加:tag 则是拉取指定版本
docker pull 镜像名 
docker pull 镜像名:tag
如: 
最新版本: docker pull mysql    
指定版本: docker pull mysql:5.3.70
# 删除镜像
# 删除一个
docker rmi -f 镜像名/镜像ID
# 删除多个 其镜像ID或镜像用用空格隔开即可 
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
# 删除全部镜像  -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
# 强制删除镜像
docker image rm 镜像名称/镜像ID
# 保存镜像
# 将我们的镜像 保存为tar 压缩文件 这样方便镜像转移和保存 ,然后 可以在任何一台安装了docker的服务器上 加载这个镜像
docker save 镜像名/镜像ID -o 镜像保存在哪个位置与名字
如: docker save oracle19c -o /home/docker/oracle19_save.tar
# 加载镜像
docker load -i 镜像保存文件位置
如: 
cd /home/docker
docker load -i oracle19_save.tar

10-4 docker 容器命令

# 查看正在运行容器列表
docker ps
# 查看所有容器 -----包含正在运行 和已停止的
docker ps -a
# 容器怎么来呢 可以通过run 镜像 来构建 自己的容器实例
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行)  --name 给要运行的容器 起的名字  /bin/bash  交互路径
docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash 
# 例如我们要启动一个redis 把它的别名取为redis001 并交互式运行 需要的命令 —我这里指定版本号为5.0.5
# 1. 拉取redis 镜像
docker pull redis:5.0.5
# 2.命令启动
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
#3.查看已运行容器
docker ps
# 停止容器
docker stop 容器名/容器ID
#删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
#删除全部容器
docker rm -f $(docker ps -aq)
#-p 宿主机端口:容器端口
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash

# 进入容器方式一 这里咱就进入 前面的 redis001容器
docker exec -it 容器名/容器ID /bin/bash
如: 
docker exec -it redis001 /bin/bash
# 退出容器
# 1. 直接退出  未添加 -d(持久化运行容器) 时 执行此参数 容器会被关闭  
exit
# 优雅退出 --- 无论是否添加-d 参数 执行此命令容器都不会被关闭
Ctrl + p + q
#停止容器
docker stop 容器ID/容器名
#重启容器
docker restart 容器ID/容器名
#启动容器
docker start 容器ID/容器名
# kill 容器
docker kill 容器ID/容器名
#  容器文件拷贝 —无论容器是否开启 都可以进行拷贝
#docker cp 容器ID/名称:文件路径 要拷贝到外部的路径  
# 1. 从容器内 拷出
docker cp 容器ID/名称: 容器内路径  容器外路径
# 2. 从外部 拷贝文件到容器内
docker  cp 容器外路径 容器ID/名称: 容器内路径
#查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
#挂载
命令:
-v 宿主机文件存储位置:容器内文件位置
-v命令可以多次使用,即一个容器可以同时挂载多个文件
# 比如: 运行一个docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always  -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf  redis:5.0.5 --requirepass "password"
# 假如docker run了一个容器,但是忘了加--restart=always,可以使用如下指令,使其开机随Docker自动启动
docker  update --restart=always 容器Id 或者 容器名
或
docker container update --restart=always 容器Id 或者 容器名
#更换容器名
docker rename 容器ID/容器名 新容器名
如: docker rename mysql mysql_test

10-5 自己提交一个镜像

docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
docker pull tomcat
docker run -itd -p8080:8080 --name tom tomcat /bin/bash
# 使用提交命令将在运行的tomcat容器打包为一个全新的镜像,名字为tom Tag为1.0
docker commit -a="Zhaof" -m="打包镜像测试" 231f2eae6896 tom:1.0
# 接下来 运行自己打包的镜像 tom:1.0
docker run -d -it -p 6500:8080 --name=zhaof tom:1.0 /bin/bash

10-6 docker 运维命令

# 查看docker工作目录
sudo docker info | grep "Docker Root Dir"
# 查看docker磁盘占用总体情况
du -hs /var/lib/docker/ 
# 查看Docker的磁盘使用具体情况
docker system df
# 删除 无用的容器和 镜像
#  删除异常停止的容器
docker rm `docker ps -a | grep Exited | awk '{print $1}'` 
#  删除名称或标签为none的镜像
docker rmi -f  `docker images | grep '' | awk '{print $3}'`
# 清除所有无容器使用的镜像
# 注意,此命令只要是镜像无容器使用(容器正常运行)都会被删除,包括容器临时停止
docker system prune -a
# 查找大文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr
# 查找指定docker使用目录下大于指定大小文件
find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr |grep '/var/lib/docker/overlay2/*'

你可能感兴趣的:(Docker相关,docker,运维,容器)