Ubuntu系统部署docker

安装docker

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

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

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

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

  1. 检查docker环境:

docker -v

utubbu离线安装docker ubuntu离线安装docker教程_mysql

此时出现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

utubbu离线安装docker ubuntu离线安装docker教程_mysql_02

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

  • 继续执行删除操作
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 [镜像名称]

utubbu离线安装docker ubuntu离线安装docker教程_ubuntu_03

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

docker pull [镜像名称]

utubbu离线安装docker ubuntu离线安装docker教程_docker_04

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 ffset 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. utubbu离线安装docker ubuntu离线安装docker教程_docker_05

  3. 停止docker服务:systemctl stop docker
  4. 查看量大容的位置,然后在上面创建转移目录文件夹:
    (1).df -h (2). mkdir -p /docker_images/docker
  5. 将/var/lib/docker的docker文件转移到/docker_images/docker文件夹下
    rsync -avz /var/lib/docker/ /docker_images/docker/
  6. 默认是无daemon.json文件的,创建这个文件并写入以下内容:
    (1). vim /etc/docker/daemon.json (2). 输入以下内容:
{
"graph":"/docker_images/docker"
}
  1. 重新加载docker并重启docker
    (1)systemctl daemon-reload (2)systemctl restart docker
  2. 操作完成,现在重启之前的服务即可,现在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