草庐IT

Ubuntu系统部署docker

Sicong Lee 2023-09-02 原文

Ubuntu系统部署docker

安装docker

安装docker分为在线安装和离线安装;

  1. 在线安装在有外网的情况下,直接使用命令拉;
  2. 离线安装就得准备好docker安装包,拖到服务器执行安装命令;

注意:安装docker之前确保服务器上的docker环境是否删除干净,如果未删除干净,做安装操作的时候会报错,安装失败!

接下来就讲一下在线安装docker的步骤;

  1. 检查docker环境:

docker -v

此时出现docker版本那么就是有docker环境;需要执行删除操作;若未出现docker版本就直接执行安装操作!

  1. 删除docker:
  • 停止docker

systemctl stop docker

  • 删除docker文件
apt-get autoremove docker dockerd ctr docker-proxy docker-init containerd containerd-shim runc docker-ce docker-engine docker.io

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker
  • 检查是否删除干净

dpkg -l | grep docker

​ 出现截图这种情况,就是还没有删除干净;

  • 继续执行删除操作
apt-get autoremove docker

apt-get autoremove docker.io

ok,此时docker全部删除完毕!

  1. 在线安装docker:
  • 拉docker

apt-get install docker.io

  • 启动docker

systemctl start docker

  • 设置开机自启

systemctl enable docker

  • 若不是root用户,将此用户加入到docker组中

sudo usermod -a -G docker ${USER}

  • 刷新用户加入到docker组

newgrp docker

ok,docker安装完成!

docker拉取镜像

一般我们需要用到的镜像是:mysql、minio、redis、java、rabbitmq、nginx

以上我们提到的镜像都是可以直接使用命令拉取(在有外网的情况下)

  • 搜索镜像

docker search [镜像名称]

  • 拉取镜像(默认是拉取到最新的镜像):

docker pull [镜像名称]

docker运行容器

docker 运行容器有两种方式:

  1. docker run …
  2. docker-compose …

这里我将第一种方式:

  • 运行nginx:
docker run --restart=always --log-opt max-size=10m --log-opt max-file=1 --name [容器名称] -v /e/nginx/conf:/etc/nginx/conf.d -v /e/nginx/html:/usr/share/nginx/html -p [运行端口]:80 -d [镜像id]
  • 运行java
docker run -itd --net=host --restart=always --log-opt max-size=10m --log-opt max-file=1 -v /data/java_logs:/home/logs -v /data:/data/images --name [容器名称] [镜像id] ./start.sh
  • 运行rabbitmq
docker run -itd --net=host --restart=always --log-opt max-size=10m --log-opt max-file=1 --name [容器名称] [镜像id]
  • 运行mysql
docker run --name [容器名称] --privileged=true --restart=always --log-opt max-size=10m --log-opt max-file=1 -v /usr/java/mysql/data:/var/lib/mysql -v /usr/java/mysql/initdb:/docker-entrypoint-initdb.d -p [端口]:3306 -e MYSQL_ROOT_PASSWORD=[密码] -d [镜像id] 
  • 运行redis
docker run -itd --restart=always --log-opt max-size=10m --log-opt max-file=1 --name [容器名称] -p 6379:6379 [镜像id]
  • 运行minio
docker run -d -p 9000:9000 --name=minio --restart=always --log-opt max-size=10m --log-opt max-file=1 -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin123" -v /data/minio/data:/data -v /data/minio/config:/root/.minio  minio/minio server /data --console-address ":9000" --address ":9090"

Linux-docker常用命令

  • 查看docker信息
    docker info
  • 镜像tar解压
    docker load < [tar包]
  • 修改镜像名称OR标签
    docker tag [镜像id] [镜像名称]:[标签名称]
  • 镜像打包位tar
    docker save -o [保存位置] [镜像id]
  • 容器转镜像
    docker commit [容器id] [镜像名称]
  • 运行容器
    docker run ...
  • 重启容器
    docker restart [容器名称]
  • 停止容器
    docker stop [容器名称]
  • 删除容器(全部)
    docker rm -f $(docker ps -aq)
  • 删除镜像(全部)
    docker rmi $(docker images -aq)
  • 查看镜像
    docker images -a
  • 查看容器
    docker ps -a
  • 将文件拷贝到容器中
    docker cp dist/. [容器名称]:/[容器中路径]
    docker cp [文件] [容器名称]:/[容器里的路径]
  • 拷贝脚本到容器中,需要授权及检查脚本的文件格式
    chmod 777 [脚本名称]
    vim [脚本]
    :set ff
    set ff=unix
  • 查看docker日志
    docker logs -f --tail 100 [容器名称]
  • 进入docker容器
    docker exec -it [容器名称] bash
  • jar包自启
    nohup java -jar demo-0.0.1-SNAPSHOT.jar >> /home/jar/temp.txt 1>&1 &
  • 脚本的编写
#!/bin/bash
echo "init"
sleep 60s
java -Xms512m -Xmx2048m -Dfile.encoding=utf-8 -Duser.timezone=GMT+08 -jar /cdzs-simple.jar --spring.config.location=/application.yml
echo "init end"
  • sql脚本编写
#!/bin/bash   
  
# execute sql stat  
mysql -uroot -pcdzsface123 -e "  
source cdzsface-cloud-dev.sql;"  
echo "数据库导入完成"

mysql -uroot -pcdzsface123 -e "
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'cdzsface123';"
echo "修改加密规则完成"
  
exit;  

  • 运行容器未加开机自启,可以更新

docker update --restart=always [容器id]

  • docker日志存放位置:
    cd /var/lib/docker/containers/
    找到*-json.log,直接移除;
    rm -rf *.log
    再重启自动创建这个日志文件。

  • 将用户添加到docker用户组

    #将用户添加到docker用户组
    sudo usermod -a -G docker ${USER}
    #刷新
    newgrp docker
    
  • linux根目录磁盘空间占满,docker存储目录迁移

    #排查哪个目录占用空间多
    du -lh --max-depth=1
    #查看docker占用磁盘空间大小
    docker system df
    #清理废弃镜像
    docker image prune  
    #清理停止容器
    docker container prune
    #清理未使用网络
    docker network prune  
    #清理构建缓存
    docker system prune  
    
  • 迁移docker目录

  1. 查看docker信息:docker info

  2. 停止docker服务:systemctl stop docker

  3. 查看量大容的位置,然后在上面创建转移目录文件夹:
    (1).df -h
    (2). mkdir -p /docker_images/docker

  4. 将/var/lib/docker的docker文件转移到/docker_images/docker文件夹下
    rsync -avz /var/lib/docker/ /docker_images/docker/

  5. 默认是无daemon.json文件的,创建这个文件并写入以下内容:
    (1). vim /etc/docker/daemon.json
    (2). 输入以下内容:

    {
    "graph":"/docker_images/docker"
    }
    
  6. 重新加载docker并重启docker
    (1)systemctl daemon-reload
    (2)systemctl restart docker

  7. 操作完成,现在重启之前的服务即可,现在docker容器所产生的数据全部都迁移到指定目录下了。

  • docker之daemon.json文件不存在

    1. vim /etc/docker/daemon.json
     {
      "registry-mirrors": ["https://gfmnzvu1.mirror.aliyuncs.com"],
      "registry-mirrors": ["镜像地址"],
      "log-driver":"json-file",
      "log-opts": {"max-size":"100m", "max-file":"1"}
    }
    

    2.加载其配置
    sudo systemctl daemon-reload
    3.重启docker使其生效
    sudo systemctl restart docker
    4.创建容器时:

    --log-driver json-file
    --log-opt max-size=10m
    --log-opt max-file=1
    

有关Ubuntu系统部署docker的更多相关文章

  1. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  2. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  3. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  4. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  5. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  6. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  9. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

  10. ruby - ri 有空文件 – Ubuntu 11.10, Ruby 1.9 - 2

    我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da

随机推荐