赞
踩
#第一种安装方式 sudo apt install docker.io docker -v #查看版本 service docker start #启动docker #第二种安装方式 sudo apt-get remove docker #移除之前安装的docker #添加 GPG 密钥 curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - #添加 Docker-ce 软件源 sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) stable" apt update sudo apt install -y docker-ce docker-ce-cli containerd.io #出现问题:在处理时有错误发生:docker-ce;执行下面代码 sudo apt-get check #检查是否有软件包损坏 sudo apt-get install -f docker-ce docker-ce-cli containerd.io #启动docker systemctl enable docker --now
注意:一般yum命令在centOS中使用,ubuntu用apt命令安装即可;
通过docker安装各种软件时,配置镜像加速会可以加快下载速度:
阿里云镜像加速器:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker #有这个目录就不创建
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://baqna0vt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
在docker hub找到对应的镜像
#查看镜像列表
docker images
#搜索镜像,nginx=nginx:latest
docker search nginx
#下载镜像,完整写法:镜像名:版本号【nginx:1.12.0】
docker pull nginx
#删除镜像,完整写法:镜像名:版本号
docker rmi nginx #等同于 docker rmi nginx:latest
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] #运行nginx:latest版本, #--name=别名,-d 后台运行【后台运行,会打印一串字符】 # --restart=always ,开机自启 #-p 88:80,端口映射【外部端口:nginx内部端口】 docker run --name=mynginx -d --restart=always -p 88:80 nginx #查看正在运行容器 docker ps #查看所有容器,包括运行中 docker ps -a #删除容器,-f 强制删除 docker rm [-f] containerid #启动/停止运行容器,容器id不一定要写完全,输入能唯一标识该容器的部分id即可 docker start/stop containterID/容器名称 #重启Linux系统 reboot #更新容器启动项,容器id可以不写全 docker update containerId --restart=always
进入容器,容器内部结构类似于一个小型Linux系统
#以交互方式进入容器内部,打开容器的bash,有的只能进入bin/sh
docker exec -it containerID /bin/bash
#nginx容器内部跳转
cd /usr/share/nginx/html
echo "<h1>hello world</h1>" > index.html
#退出容器内部
exit
将外部目录【主机目录】挂载到容器内部。
数据挂载选项:-v 外部目录:本地目录:读写模式
读写模式:即容器内部对挂载目录的可操作方式
#将本地的/data/html挂载到容器的
docker run --name=mynginx -d \
-p 88:80 --restart=always \
-v /data/html:/usr/share/nginx/html:rw
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf:rw \
nginx
注意:
将配置好的nginx容器提交到本地镜像。
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] #-a 指明作者 #-m 提交说明 docker commit -a 'liuly' -m '首页变化' containerid lly:v1.0.0 #保存 docker save [OPTIONS] IMAGE [IMAGE...] #镜像lly:v1.0.0压缩成abc.tar文件 docker save -o abc.tar lly:v1.0.0 ls #看一下里面有没有abc.tar #以root用户权限,将abc.tar到指定ip主机的/usr/test目录下;具体问题解决在后面有说明 scp abc.tar root@192.168.XX.XX:/usr/test #其他主机加载镜像 docker load -i abc.tar
将镜像推送到docker hub。
首先需要注册一个docker hub的账号;
登录docker hub后创建一个仓库【create a repository】
#推送命令
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
docker tag lly:v1.0.0 liulinyu/llynginx:v1.0.0
docker login #输入docker hub的用户名和密码登录
docker push liulinyu/llynginx:v1.0.0
#查看日志
docker logs containerID
#容器内部文件复制到外部;将前后位置对调,实现外部->容器内部复制
docker cp containerID:/etc/nginx/nginx.conf /data/conf/nginx.conf
准备:新建Spring Boot应用,选择Web和Redis相关依赖;创建项目后将无用的文件删除;【记得在IDEA右下方提示将项目Load Maven Project,或右击项目名Add as Maven Project】
Controller代码:
package com.atlly.javademo.controller; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class CounterController { @Resource RedisTemplate redisTemplate; @GetMapping("/hello") public String count() { Long count = redisTemplate.opsForValue().increment("count_people"); return "有【" + count + "】人访问过该网页"; } }
配置文件:
spring.redis.host=192.168.XXX.XXX
spring.redis.password=XXX
#下载redis
docker pull redis
#主机创建redis.conf
cd /data/redis
vim redis.conf #写入appendonly yes
#以加载自定义配置文件方式启动redis[redis-server /etc/redis/redis.conf]
docker run -v /data/redis/redis.conf:/etc/redis/redis/conf \
-v /data/redis/data:/data
-d --name myredis \
-p 6379:6379 \
redis redis-server /etc/redis/redis.conf
测试:使用 Another Redis Desktop Manager或其他Redis桌面管理工具测试连接;
配置Redis访问密码:
vim /data/redis/redis.conf
#添加下面这行,设置密码,并保存修改
requirepass 123456
#重启容器,重新测试连接redis容器
docker restart myredis
Dockerfile写法:
#基础运行环境,从docker hub上选择镜像 FROM IMAGE #镜像作者,一般姓名加邮箱 MAINTAINER authorName<AuthorEmail> #镜像运行时执行的命令 RUN # 拷贝文件(支持正则表达式)到镜像,并自动解压(如果是压缩包) ADD #镜像工作目录 WORKDIR #挂载目录 VOLUME #端口配置 EXPOSE 9001 # 镜像启动命令,只有最后一个会生效,可被替代。 CMD # 镜像启动命令 ENTRYPOINT # 拷贝,将本机指定目录的文件复制到镜像中 COPY # 设置环境变量 ENV
在创建的SpringBoot项目:
#基础运行环境 ,
FROM openjdk:11-jdk-slim
#maintainer指明镜像作者
LABEL maintainer=liuly
#将jar复制到指定位置
COPY target/*.jar /app.jar
#镜像启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
如果Windows没有配置Docker,不能使用docker打包,将项目的target文件夹和Dockerfile文件上传到配置了docker的Linux服务器中,进行构建。
在Windows 命令行跳转到指定目录,并执行下面命令:
#将当前目录的target文件夹和Dockerfile文件复制到192.168.XX.XX主机上的/test目录下
scp -r target Dockerfile root@192.168.XXX.XXX/test
远程复制到Linux服务器后,在Linux服务器终端:
cd /test #-t imageName,指定镜像名称:版本号 #-f Dockerfile,指定dockerfile文件,在当前目录下,且名字一致,可忽略该项 # .,这个点表示在当前目录下工作 docker build -t lly-java-demo:v1.0 -f Dockerfile . #查看本地下载镜像中,是否有构建好的镜像 docker images #启动容器,访问192.168.XXX.XXX:8080/hello docker run -d -p 8080:8080 --name=mydemo lly-java-demo:v1.0 #如果启动之后,运行几秒就退出,查看容器日志 docker logs CONTAINERID #推送到docker hub docker tag lly-java-demo:v1.0 liulinyu/lly-jd:1.0 docker push liulinyu/lly-jd:1.0 #其他主机下载 docker pull liulinyu/lly-jd:1.0
问题:启动容器之后,过一会儿就退出了。可能是应用有问题,使用docker logs查看日志,发现错误:
Error:Unable to access jarfile java-demo-0.0.1-SNAPSHOT.jar
原因:在配置Dockerfile时,ENTRYPOINT的jar写错
解决:将ENTRYPOINT的jar包改成与COPY后的/app.jar,才能扫描到;
#输入登录用户密码;输入新的root密码;再确认新密码
sudo passwd root
scp abc.tar root@192.168.XX.XX:/usr/test/
#提示:ssh:connect to 192.168.XX.XX port 22:Connectin refused
#解决:在本机和远程主机安装openssh-server
apt-get install openssh-server
问题:ssh登录到远程主机的root用户,密码正确,但是提示:permission denied,please try again
原因:ssh可以登录远程主机的普通用户,但是root用户默认设置是禁止访问的。将配置修改一下,运行其远程访问即可。
解决:
#不要找错了,是sshd_config,不是ssh_config
cat /etc/ssh/sshd_config|grep PermitRootLogin
将PermitRootLogin 对应项改成 yes
vim /etc/ssh/sshd_config
#将PermitRootLogin值修改为yes
#重启sshd服务
service sshd restart
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。