当前位置: 首页 > news >正文

docker的安装和常用命令


注:这里的安装是针对于cetnos7。

安装

老版本

安装老版本可能遇到报错:missing signature key

yum -y install docker.x86_64

新版本

如果没有配置yum源安装软件可能失败,配置阿里云yum源方法:

cd /etc/yum.repos.d/
mkdir repo_old
mv *.repo repo_old/
wget http://mirrors.aliyun.com/repo/Centos-7.repo
# 如果没有wget命令,可以使用curl
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
yum clean all
yum makecache
yum install yum-utils
# 换成阿里镜像仓库
yum-config-manager --add-repo   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum remove docker*
yum -y install docker-ce
systemctl start docker

设置docker镜像,阿里云镜像源需要到官网注册后才能获取,推荐使用阿里的。若某些官方镜像用阿里的拉取不到,可以参考 DaoCloud/public-image-mirror 的README.mdissue里的说明,获取其他镜像源。github访问不了,可以访问gitcode:public-image-mirror

镜像源配置

vi /etc/docker/daemon.json
{"registry-mirrors": ["https://dockerhub.icu","https://docker.chenby.cn","https://docker.1panel.live","https://docker.awsl9527.cn","https://docker.anyhub.us.kg","https://dhub.kubesre.xyz"]
}
systemctl daemon-reload
systemctl restart docker#不配置,直接使用
docker pull docker.anyhub.us.kg/docker.io/biluoer/hadoop:3.1.3-base

常用命令

基本命令

# 镜像命令
docker pull nginx	# 拉取镜像
docker push biluoer/nginx	# 推送镜像
docker build -t biluoer/nginx .	# 构建镜像
# 保存镜像为一个压缩包
# docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:latest
# 加载压缩包为镜像
docker load -i nginx.tar
# 将某个容器构建为镜像
docker commit -m "提交信息" -a "作者名" 容器名称或id tag名称
# 例如将当前运行的容器nginx构建为镜像
docker commit nginx biluoer/nginx:v1# 容器相关命令
# 创建并运行一个容器
#--name指定容器名称;-p端口映射;-d后台运行;最后的nginx是镜像名称
docker run --name containerName -p 80:80 -d nginx
# 让运行的容器暂停
docker pause nginx
# 让暂停状态的容器恢复运行
docker unpause 容器名称或容器ID
# 停止运行的容器
docker stop 容器名称或容器ID
# 运行的容器
docker start 容器名称或容器ID
# 删除容器
docker rm 容器名称或容器ID
# 重新运行容器
docker restart 容器名称或容器ID
# 停止并删除容器(stop+rm)
docker rm -f 容器名称或容器ID
# 进入容器,bash-shell类型,还可以为sh等
docker exec -it nginx bash
# 让容器直接使用某命令,例如命令:ip addr
docker exec nginx ip addr

清理

#命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
docker system prune
# 作用和上面一样。-f,表示强制删除,不会询问
docker system prune -f
# 清理更彻底,会把没有正在使用的镜像都删掉(小心使用)
docker system prune -a

文件复制

# 本地到服务器
docker cp 本地路径 容器id或者容器名字:容器内路径
# 服务器到本地
docker cp 容器id或者容器名字:容器内路径 本地路径

构建镜像

# 使用当前目录的 Dockerfile 创建镜像;-t指定构建出的镜像的tag名称
docker build -t biluoer/ubuntu:v1 . 

上传镜像

docker login -u username -p pwd
docker tag hadoop:3.1.3 biluoer/hadoop:3.1.3
docker push biluoer/hadoop:3.1.3

注:

  • 旧版登录成功后,密码会经过base64编码保存在$HOME/用户名/.docker/config.json的auth属性中,进过该命令echo 'auth值' | base64 --decode即可看到明文密码。

  • 新版登录会报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。不允许密码明文出现,但其实还是登录成功了,密码统一保存到config.json中了。解决方法:

    • 方法1:将密码写到文件中使用:cat .docker.pwd | docker login -u username --password-stdin
    • 方法2:密码保存到环境变量使用,与方法1类似。
    • 方法3:官方推荐了一些工具进行安全的登录。

补充

权限不足

无目录权限

#若挂载目录在容器内访问没有权限,可以在挂载时加上参数:
--privileged=true 

无用户权限

# 以root用户身份进入容器
docker exec --user root -it kafka bash

容器访问

容器无法连接另一个容器。

  • 方法1:使用主机ip
#容器内默认只能访问docker提供的网关,不能访问其他容器。解决方法:run命令时加上参数:
--network=host
#值:bridge(默认,容器不具有一个公有IP)、host(使用宿主机的网络接口和IP地址)、none(使用127.0.0.1的本机网络)...
  • 方法2:--link 参数被用来在容器之间创建网络连接,使得容器可以互相解析对方的名字和访问相应的服务
#run命令时加上一下参数
--link 当前运行的容器名称:映射名称
# 然后可以通过映射名称+端口号服务其他容器的服务
  • 方法3:创建网络,让不同容器使用相同的网络(--link参数现已不推荐使用)
# 创建桥接网络,bridge是默认驱动,可以不加
docker network create [--driver bridge] hadoop-net
#创建桥接网络,并指定子网配置,范围:192.168.1.1-192.168.1.254
docker network create --subnet=192.168.1.0/24 hadoop-net

jenkins推送镜像失败

登录后使用docker推送没有问题,但使用jenkins推送报错:denied: requested access to the resource is denied。

原因:因为jenkins在推送镜像的时候使用的是jenkins的伪用户,因此无法直接在jenkins完成登录。

解决方法:将之前生成的config.json拷贝到jenkins的目录下即可

cd /home/用户名/
cp .docker/config.json /var/lib/jenkins
chown -R jenkins.jenkins .docker# 如果jenkins是以容器方式安装的
docker cp .docker jenkins:/root/
# 或者先在任务的执行脚本中执行一次登录命令,让它自动生成

修改主机名

直接进入容器中修改/etc/hosts,这种方式在重启容器后,修改的内容会丢失。

如果是容器未运行的状态,通过在使用run命令时加上参数 --hostname 主机名 就可以指定容器运行后的主机名。

编写Dockerfile

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 注:如果使用ADD命令,则会自动解压,上面的三条命令就可以变为以下命令
#ADD ./jdk8.tar.gz $JAVA_DIR/
#COPY ./docker-demo.jar /tmp/app.jar
#RUN cd $JAVA_DIR \
# && mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 注:可以通过ENV命令定义一个端口变量,根据传入的参数动态指定端口
# 例如使用run命令时可以加上参数:-e MY_PORT=8088# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android全面解析之context机制(三): 从源码角度分析context创建流程(下)
  • 偏导数的可视化
  • Java语言程序设计——篇十三(2)
  • 哈希表 - 赎金信
  • 数学建模笔记(2):Topsis分析法
  • java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2
  • 【洛谷/水滴题解】[NOIP2005 普及组] 采药
  • C++入门:类和对象(入门篇)
  • 详解Linux命令--zip/unzip
  • 谷粒商城实战笔记-175~177-商城业务-检索服务-检索查询接口开发
  • Unity动画模块 之 简单创建一个序列帧动画
  • 6 款最佳付费和免费 iPhone 解锁应用和软件
  • [FBCTF2019]RCEService1
  • Redis7-分布式锁
  • 嵌入式学习Day30---Linux软件编程---进程间的通信
  • 【347天】每日项目总结系列085(2018.01.18)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • ES6简单总结(搭配简单的讲解和小案例)
  • Java 23种设计模式 之单例模式 7种实现方式
  • Laravel核心解读--Facades
  • React系列之 Redux 架构模式
  • 讲清楚之javascript作用域
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用putty远程连接linux
  • 为视图添加丝滑的水波纹
  • Prometheus VS InfluxDB
  • ​linux启动进程的方式
  • ​低代码平台的核心价值与优势
  • ​力扣解法汇总946-验证栈序列
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $L^p$ 调和函数恒为零
  • ()、[]、{}、(())、[[]]命令替换
  • (~_~)
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (4) PIVOT 和 UPIVOT 的使用
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (MATLAB)第五章-矩阵运算
  • (四) 虚拟摄像头vivi体验
  • (转)iOS字体
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net MySql
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [240727] Qt Creator 14 发布 | AMD 推迟 Ryzen 9000芯片发布
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android View] 可绘制形状 (Shape Xml)
  • [BSidesCF 2019]Kookie1
  • [CSS]CSS 字体属性
  • [Excel] vlookup函数