Docker基本命令及操作

Docker基本命令及操作

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植到容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,保证了容器之间的安全性。Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象中的对象与类。

Docker特点

1. 更快速的交付和部署
2. 更高效的虚拟化
3. 更轻松的迁移和扩展

Docker功能

1. 简化配置

​ 2. 代码管道化管理:能够对代码以流式管道化进行管理
​ 3. 应用隔离
​ 4. 服务合并
​ 5. 快速部署

一, Docker的组成

  • 镜像(image):Docker镜像就相当于是一个文件系统,通俗来说就是为容器用来创建容器的.
  • 容器(Container):Docker利用容器独立运行一个或一组应用,容器是用镜像创建的运行实例,它可以被启动,开始,停止,删除,每个容器都是相互隔离的,保证平台的安全,可以把容器看作一个简易版的Linux系统. 容器相当于java中的对象,镜像相当于java中的类 .
  • 仓库(Repository):仓库是集中存放镜像文件的场所。仓库注册服务区上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。仓库分为公开仓库和私有仓库两种形式.

二, Docker命令

​ 2.1 service docker start:开启Docker服务
​ 2.2 Docker帮助命令
​ 2.2.1 docker version:显示docker的版信息
​ 2.2.2 docker info:显示Docker的系统信息(包含镜像与容器的数量)
​ 2.2.3 docker 命令 —help:查看帮助
​ 2.3 Docker镜像命令
​ 2.3.1 docker images:显示本机上所有安装镜像
​ docker images -a:列出所有的镜像
​ docker images -q:只显示镜像的ID
​ 2.3.2 docker search 镜像名:搜索镜像
​ 2.3.3 docker pull 镜像名:下载镜像
​ 2.3.4 docker rmi:删除镜像
​ docker rmi -f 镜像ID [镜像ID1 镜像ID2 镜像ID3]:删除指定镜像
​ docker rmi -f docker images -q:删除所有的镜像
​ 2.3.5 docker load [-i | < ] 镜像:导入镜像
​ -i:跨操作系统使用
​ 2.3.6 重命名镜像名称和tag

docker tag imageId repository:tag
#或
docker tag old_image new_image

​ 2.4 Docker容器命令
​ 2.4.1 docker run [可选参数] 镜像名:运行容器

參數描述
–name=“xxx”容器名称
-d后台模式运行
-it使用交互模式运行,进入容器查看内容
-p(小写)指定端口映射:-p XXXX
-P(大写)随机端口映射
–net设置网络(常见:–net host)
-v挂载
-e设置环境变量
–restart重启时操作(常见:–restart=always,重启时启动容器)

​ 2.4.2 docker ps [可选参数]:列出运行的容器
​ 2.4.3 exit:容器直接退出
​ 2.4.4 docker rm -f 容器ID:删除指定容器
​ docker rm -f docker ps -aq:删除所有容器
​ 2.4.5 docker start 容器ID:启动容器
​ 2.4.6 docker restart 容器ID:重启容器
​ 2.4.7 docker stop 容器ID:停止正在运行的容器
​ 2.4.8 docker kill 容器ID:强制停止
​ 2.5 Docker其它命令
​ 2.5.1 docker logs -tf 容器ID:查看日志(-t 查看日誌產生的日期; -f 查看實時日誌;–tail=n 查看最後n條日誌,–since=“xxxxxx”查看某时间后的日志)
​ 2.5.2 docker top 容器ID:查看容器中的进程信息
​ 2.5.3 docker inspect 容器ID:查看镜像的元数据

三, Docker部署Java项目

3.1 DockerFile指令

FROM			# 基礎鏡像, 一切從這裡開始構建
MAINTAINER		# 鏡像是誰寫的, 姓名+郵箱
RUN				# 鏡像構建的時候需要運行的命令
WORKDIR			# 鏡像的工作目錄
VOLUME			# 掛載的目錄
EXPOSE			# 保留端口配置
CMD				# 指定這個容器啟動的時候要執行的命令, 只有最後一個會生效, 可被替代
ENTRYPOINT		# 指定這個容器啟動的時候要執行的命令, 可以追加命令
ONBUILD			# 當構建一個唄繼承DockerFile, 這個時候就會運行onbuild的指令, 觸發指令
COPY			# 類似ADD, 將我們文件拷貝到鏡像中
ENV				# 構建的時候設置環境變量

3.2 部署Java項目

第一步 : 先将Spring Boot项目打包成 .jar
​第二步 : 再编写Dockerfile文件

FROM java-jre
VOLUME /tmp
COPY microservice-docker-8091-1.0-SNAPSHOT.jar app.jar
RUN bash -c "touch /app.jar"
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "> /log/app.log"]

解释:

FROM java-jre	#FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8表示使用 Jdk1.8 环境为基础镜像进行构建镜像。
VOLUME /tmp		#VOLUME ,VOLUME 指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
COPY microservice-docker-8091-1.0-SNAPSHOT.jar app.jar		#COPY ,拷贝文件到docker容器并且重命名
RUN bash -c "touch /app.jar"		#修改這個文件的訪問時間和修改時間為當前時間
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]		#ENTRYPOINT,为了缩短Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT。

第三步 : 创建docker文件夹,将 .jar和Dockerfile放在文件夹中。
​第四步 : 切换目录到docker中,执行命令:

docker build -t firstdocker .

解释:

  • firstdocker:自定义创建镜像名
  • . :当前目录

第五步 : 再运行docker镜像,执行命令:

docker run -p 8080:8080  镜像名
或
docker run -d --net host --name 自定義容器名 鏡像名稱

将容器的8080端口(後面)映射到主機的8080端口(前面)

3.3 其他操作

進入啟動容器查看內部目錄結構

# 查看已啟動容器, 獲取容器ID
docker ps
# 進入目錄
docker exec -it 容器ID/名稱 /bin/bash

3.3.1 鏡像/容器導入導出

鏡像導入導出

  1. 使用save和load

    # 導出鏡像
    docker save 鏡像ID > 本地目錄路徑(xxx.tar)
    # 導入鏡像
    docker load < 本地鏡像目錄
    
  2. export和import

    # 導出鏡像
    docker export 容器ID > 本地目錄路徑
    # 導入鏡像
    docker import 鏡像名稱 < 本地容器目錄
    

區別 :

export導出的鏡像文件體積小於save保存的鏡像

docker import可以為鏡像指定新名稱, load不能

docker export不支持將多個鏡像打包, save可以

docker export/import 是根據容器拿到的鏡像, 僅保存當時的快照狀態, 會丟失歷史記錄, 無法進行回滾. save/load沒有丟失鏡像的歷史, 可以回滾到之前的layer

export主要用來製作基礎鏡像, 作為基礎的開發環境, save常為客戶服務器直接使用

從遠程複製docker鏡像到本地服務器下

scp root@ip:/遠程路徑 本地路徑 

将本地docker打包文件複製到遠程服務器中

scp 本地路徑 user@ip:遠程路徑

3.3.2 容器內時間與服務器不一致

解決方法:

把宿主機的時區與時間綁定到容器內

docker運行命令加上:

-v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime

若宿主機不存在timezone或timezone變成文件夾,則需要先做好一些提前配置

echo 'Asia/Shanghai' > /etc/timezone
#或
echo 'Asia/Shanghai' > /etc/timezone/timezone

3.3.3 倉庫

從倉庫中獲取鏡像:

docker pull xx.xx.xx.xx:xxxx/imageName

提交鏡像到倉庫:

docker push xx.xx.xx.xx:xxxx/imageName

查看倉庫鏡像:

curl -X GET xx.xx.xx.xx:xxxx/v2/_catalog

查看一个镜像的tag

# imageName 鏡像名稱
curl -X GET xx.xx.xx.xx:xxxx/v2/imageName/tags/list

獲取鏡像sha256

# imageName 鏡像名稱
# tag 版本
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET xx.xx.xx.xx:xxxx/v2/imageName/manifests/tag

刪除倉庫的鏡像

# imageName 鏡像名稱
# sha256 鏡像sha256值
curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -X DELETE xx.xx.xx.xx:xxxx/v2/imageName/manifests/sha256
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值