IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker常用命令、Dockerfile、docker仓库 -> 正文阅读

[系统运维]docker常用命令、Dockerfile、docker仓库

centOS安装docker

一、docker常用命令

docker pull image-name:tag 拉取某个image到本地,image-name换成自己要拉取的image名称,tag可选,不写默认拉取这个image的latest版本

docker run image-name:tag 使用image创建container,image-name换成自己的image名称,tag可选,不写默认使用这个image的latest版本;docker run的时候,如果本地没有这个image的话会从远程仓库拉取image并创建container
docker run可选参数:
-d:该container后台运行

--name:指定该container的名称

-it:交互式运行,某些image使用 -d 后台运行还是会关闭,使用 -it/-d -it 交互式运行不会关闭
-p:指定端口映射,比如 -p 9999:8080 是将container的8080端口映射到centos的9999端口即通过访问centos的9999端口就可访问这个container的8080端口,比如container是tomcat,默认是使用的8080端口,映射到centos的9999端口之后,可以访问centos的9999端口访问这个tomcat

--memory:限制该container最大使用的内存,如果不限制该参数,那么container可以使用的最大内存和服务器的内存一样;如:--memory 256M
--cpu-shares:限制该container使用的cpu核数,限制的是一个比例;如:--cpu-shares 10 这里的10指的就是比例,比如另外创建了一个container指定 --cpu-shares 20 那么使用的cpu核数就是 --cpu-shares 10 的container的两倍

-e:后面可以指定启动某个容器可选参数的值,比如MySQL的image有一些可选参数,如:-e MYSQL_ROOT_PASSWORD=root,可以用来指定root用户的密码为root;注意:-e后面的可选参数需要看这个image是否有可选参数,如果有的话可以写,没有的话就不写。

--privileged:设置启动优先级即优先启动该container

如:docker run -d --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --privileged mysql
docker run -d --name test02 --memory 256M --cpu-shares 10 -p 8888:9989 test01

docker start/stop/restart container-name 启动/停止/重启某个container,container-name换成自己已经创建过的container名称

docker inspect container-name 查看某个container的详细信息

docker ps 查看当前正在运行的容器
docker ps -a 查看所有创建过的容器(包含正在运行和已经结束运行的container)
在这里插入图片描述
参数解释:
CONTAINER ID:创建该容器时自动生成的唯一id
IMAGE:创建该容器时所用的image
COMMAND:启动该容器时实际执行的命令
CREATED:该容器创建于多久之前
STATUS:该容器状态(Up…表示正在运行,Exited…表示容器未运行;如:Up 4 seconds 表示容器正在运行且运行了4秒)
PORTS:该容器和centos的端口映射关系,其中 /tcp 前面的端口是容器的端口,-> 前面的端口是映射的centos的端口
NAMES:该容器创建时指定的名称

docker rm -f container-name 删除某个容器(其中container-name可以换成自己创建container时取的名称或者某个container的container_id)
在这里插入图片描述
docker rm -f $(docker ps -aq) 删除所有的容器(是否正在运行都会删除)
在这里插入图片描述
docker rmi -f image-name:tag 删除某个image(其中image-name:tag换成自己已下载的 image的名称:标签即版本,比如删除hello-world的image:docker rmi -f hello-world:latest)
在这里插入图片描述
docker rmi -f $(docker images) 删除所有image
在这里插入图片描述
docker images 查找所有的image
docker images|grep xxx 条件查找image
在这里插入图片描述
docker build -t image-name Dockerfile文件所在目录 根据指定目录下的Dockerfile文件创建image,其中 image-name 为创建的image的名称,Dockerfile文件所在目录 指定我们使用哪个目录下的Dockerfile文件,如果是当前目录下的Dockerfile文件可以写 .
在这里插入图片描述
在其他目录下执行,需要指定使用哪个目录的Dockerfile文件
在这里插入图片描述
docker commit container-name image-name:tag 使用container生成image;container-name是运行的container的名称,image-name是生成的image名称,tag可以写版本号,tag是非必写的;该命令可以用来做定制化的image,比如现在有个image,通过运行这个image生成container之后,在container中添加自己需要的内容,然后将这个container生成image,从而得到一个符合自己需求的image,此种方法生成image不建议使用,还是按照官方推荐的Dockerfile来制作image。
在这里插入图片描述
docker logs container-name 查看某个container的日志,container-name换成自己的容器名称
在这里插入图片描述
docker stats container-name 查看某个container的资源使用情况,类似于Linux的top命令,container-name换成自己的容器名称;
在这里插入图片描述
docker stats方式查看container资源使用情况不太方便且不全,可以使用 weaveworks/scope 进行图形化界面查看container信息,weaveworks需要安装,安装好weaveworks之后,默认使用的4040端口,所以需要防火墙打开4040端口,然后访问安装weaveworks的服务器的4040端口就可以查看到该服务器上所有的container及每个container的详细信息也可以在weaveworks中对container做操作,上面的链接中有weaveworks安装方式,如下:
在这里插入图片描述

docker top container-name 查看某个container信息,container-name换成自己的容器名称
在这里插入图片描述
docker exec -it container-name /bin/bash 进入某个容器内部,其中container-name换成自己的container名称,需要保证进入的这个容器需要是运行中的状态,如果该容器已经关闭,比如docker run的时候没有-d或者-it运行,那么这个容器会被ctrl+c或者xshell窗口关闭而关闭,那么此时容器就不是运行中状态,使用docker exec则无法进入容器内部。

二、Dockerfile

官方各个组件Dockerfile文件 如:MySQL5.7版本官方Dockerfile文件
Dockerfile中常用指令:
FROM:用于指定container的基础镜像,我们知道container可以理解为一个浓缩版的Linux系统,所以对于container来说最基础的镜像应当是一个Linux系统,所以FROM一般指定为某个版本的Linux系统,当然可以指定为jdk,因为jdk里面是集成了Linux系统的;如:FROM openjdk:8
RUN:在docker build时执行的命令;如:RUN groupadd -r -g 999 redis && useradd -r -g redis -u 999 redis
ENV:设置变量的值,这个设置的值可以在docker run的时候通过-e进行修改;如:ENV GOSU_VERSION 1.12
LABEL:可以用来设置镜像标签,key=value的格式;如:LABEL name=“test-member-image” version=“1.0” author=“admin”
VOLUME:指定数据挂载目录,可以在docker run的时候通过-v进行修改;如:VOLUME /data
COPY:将Dockerfile文件所在目录的某个文件复制到image中的某个目录下且不会解压文件,如果image中不存在该目录会自动创建;如:COPY my-test-member-biz-0.0.1-SNAPSHOT.jar /usr/java/test-member-image.jar就是在通过docker build创建image的时候将当前目录(当前目录即Dockerfile文件所在目录)下的my-test-member-biz-0.0.1-SNAPSHOT.jar文件复制到image的/usr/java目录中并且名字叫做test-member-image.jar。注意:如果指定的源文件即my-test-member-biz-0.0.1-SNAPSHOT.jar也是带有路径的话在build的时候会报错该文件不存在;如果指定源文件路径的话只能指定到源文件所在的目录,而不能指定到源文件;要指定到源文件的话不能写路径只能是当前目录的某个文件即需要将源文件和Dockerfile文件放在同一个目录下。
ADD:和COPY类似也是复制文件到image中,只是会将这个文件进行解压;如:ADD my-test-member.tar /usr/java/将当前目录的my-test-member.tar文件复制并解压到/usr/java目录中;这个指令用的较少,更多的是用COPY指令。
WORKDIR:指定镜像的工作目录,后面的命令都是基于此目录执行的,如果该目录不存在会自动创建;如:WORKDIR /data
CMD:docker run创建容器时会执行的命令,如果有多个CMD只有最后一条CMD生效;如:CMD [“java”,"-jar","/usr/java/test-member-image.jar"]
ENTRYPOINT:和CMD类似,同样有多个ENTRYPOINT的话只有最后一条生效。
EXPOSE :指定container暴露的端口,docker run创建container时可以通过-p将该端口映射到宿主机的某个端口,对于jar包的镜像因为这个jar包里面就已经指定了项目的端口,那么就不需要Dockerfile中设置了;如EXPOSE 6379
MAINTAINER:指定作者信息;如:MAINTAINER admin

注意:如果我们制作的是jar包的镜像,比如我们将一个springboot项目打成的jar包做成镜像,使用COPY指令将jar包复制到image的非根目录下的话,CMD指令使用java -jar启动的时候也需要带上这个目录,否则不能成功启动;但是可以在CMD指令之前使用WORKDIR指令指定后面执行指令的目录为这个目录就可以直接java -jar;如果是COPY在根目录下就不需要带上目录。
比如:COPY my-test-member-biz-0.0.1-SNAPSHOT.jar /usr/java/test-member-image.jar将jar包复制在了/usr/java目录下,后面 CMD [“java”,"-jar",“test-member-image.jar”]的话则不能启动必须 CMD [“java”,"-jar","/usr/java/test-member-image.jar"] ;或者在CMD指令之前写入WORKDIR /usr/java指定后面的指令都在/usr/java目录下执行之后就可以成功启动了。如果COPY my-test-member-biz-0.0.1-SNAPSHOT.jar test-member-image.jar将jar包直接复制在根目录下的话就可以CMD [“java”,"-jar",“test-member-image.jar”]成功启动。
对于一个Dockerfile文件来说,一般以下几个指令是必须的:
FROM、COPY、CMD

三、docker仓库

docker远程仓库,主要分为三种:
官方远程仓库阿里云镜像仓库、私有镜像仓库(比如公司内部的仓库)

1.官方远程镜像仓库

官方远程仓库
这个仓库是安装docker之后默认使用的仓库,位于国外所以拉取镜像等操作可能会慢一些,这个仓库涵盖了几乎所有需要的组件比如MySQL、redis、mq等等都可以在上面找到对应的image;上面除了有各大组件的官方提供的image之外也有很多私人用户上传的对应组件,所以我们也可以在这个仓库上面上传我们自己制作的image;上传image步骤:

a、首先需要在官方远程仓库中注册账号,使用邮箱注册
重点:记住自己设置的Docker ID,因为Docker ID是登录官方远程仓库的账号;不论是官网上登录还是docker中通过docker login命令登录,账号都是Docker ID,如果忘记了Docker ID或者密码可以在官网中找回密码,填入注册账号使用的邮箱找回密码,docker发送到邮箱中的邮件有Docker ID和重置密码的链接。

b、在需要push image到官方远程仓库的机器中执行登录命令,登录官方远程仓库命令:

docker login

在这里插入图片描述
登录之后,还不能直接push image到官方远程仓库中,此时还需要先将需要推送的image标记tag。
直接push报错如下:
在这里插入图片描述

c、标记tag命令

docker tag 本地image名称 Docker ID/在docker远程仓库中的image名称:tag(tag可以定义为版本号)

如:docker tag test-member-image boyxxxxrx/test-member-image:v1.0
其中boyxxxxrx是我的Docker ID
在这里插入图片描述
d、推送image到官方远程镜像仓库中,推送命令

docker push 本地image名称:tag

如:docker push boyxxxxrx/test-member-image:v1.0
因为刚刚使用docker tag命令标记之后本地已经多了一份image,名称就是boyxxxxrx/test-member-image的image,版本是v1.0;我们这里push时只能push刚刚tag的image,否则push不成功。
在这里插入图片描述
e、查看官方远程镜像仓库中是否有刚刚push的image
在这里插入图片描述

2、阿里云镜像仓库

阿里云镜像仓库
登录阿里云之后,需要先创建命名空间,每个账号最多创建3个,所以根据需要创建,可以是私有的和公开的命名空间,也就是后面上传image到这个命名空间之后只能自己的账号pull还是别人的账号也可以pull这个image的区别。
a、退出刚刚登录的官方远程镜像仓库-可以不用退出,直接登录阿里云镜像仓库也行

docker logout

在这里插入图片描述

b、登录阿里云镜像仓库

docker login --username=你的阿里云账号一般是手机号 registry.cn-hangzhou.aliyuncs.com

阿里云官方也可以查看登录命令:
在这里插入图片描述
在这里插入图片描述
c、标记image

docker tag 本地image registry.cn-hangzhou.aliyuncs.com/你的命名空间/上传到阿里云镜像仓库后的名称:tag

如:docker tag test-member-image registry.cn-hangzhou.aliyuncs.com/xxx_private_test/test-member-image:v1.0
其中xxx_private_test是我在阿里云镜像仓库中创建的命名空间
在这里插入图片描述
d、push image

docker push registry.cn-hangzhou.aliyuncs.com/你的命名空间/上传到阿里云镜像仓库后的名称:tag

如:docker push registry.cn-hangzhou.aliyuncs.com/xxx_private_test/test-member-image:v1.0
在这里插入图片描述
e、查看阿里云镜像仓库中是否有刚刚上传的镜像
在这里插入图片描述
注意: 以上两种上传image的方式都是基于现有的远程仓库进行的,不需要自己搭建仓库即可使用,非常方便,如果个人使用还可以;但是上面上传的image要么所有人都可以pull,要么只能自己pull;如果对于公司内部的镜像不想外人访问,公司内部人员都可访问的不太方便;所以下面介绍自己搭建docker镜像仓库。

3、私有镜像仓库

搭建私有镜像仓库采用Harbor进行搭建,可以在GitHub上查找Harbor
GitHub Harbor地址
在GitHub中下载对应版本的Harbor压缩包,我这里采用2.0.4的版本搭建,即 harbor-offline-installer-v2.0.4.tgz 压缩包;在上面链接中下拉到 Install & Run 处点击其中的 Harbor release 可以选择对应的版本。
在这里插入图片描述
在这里插入图片描述

下拉到 Demos 处,点击其中的 Live Demo 可以查看通过Harbor搭建的镜像仓库的页面,这是一个在线的页面,和搭建后的页面是一样的;账号:admin,密码 Harbor12345

在这里插入图片描述
下面进行安装
a、将刚刚下载的 harbor-offline-installer-v2.0.4.tgz 压缩包上传到centos对应的目录中,一般将安装的应用都是放在 /usr/local 目录中
在这里插入图片描述
b、解压压缩包

tar -zxvf harbor-offline-installer-v2.0.4.tgz

c、修改配置文件
解压之后,进入解压后的harbor目录,里面有一个 harbor.yml.tmpl 的文件,这个文件就是harbor的配置文件,根据版本的不同可能解压后的内容不同,当然配置文件的名称也不一样;其他版本有可能是叫做 harbor.cfg 等等
在这里插入图片描述
说明:最好将原有的配置文件复制一份,修改复制的配置文件,原有的配置文件 harbor.yml.tmpl 不修改;并且2.0.4安装的时候,使用的是 harbor.yml 配置文件,而不是解压之后的 harbor.yml.tmpl 配置文件,所以复制一份配置文件并且命名为 harbor.yml ;如果是 harbor.cfg 的配置文件,安装的时候使用的配置文件名称也是 harbor.cfg,最好也将原有的 harbor.cfg 文件保存一份再做修改。

cp harbor.yml.tmpl harbor.yml

修改复制的配置文件即 harbor.yml

vi harbor.yml

修改 hostname 为当前安装harbor的服务器绑定的域名或者是当前服务器的ip地址
在这里插入图片描述
在这里插入图片描述

其中的 harbor_admin_password 就是 admin 账号的密码,可以根据需要修改
在这里插入图片描述
修改使用http的形式访问,如果是https的话需要配置 ssl 证书

ui_url_protocol = http

说明:如果你安装的harbor的版本,解压之后的配置文件是 harbor.cfg 那么里面应该有上面的配置,将上面的配置改为http即可,如果解压之后是 harbor.yml.tmpl 配置文件的话,里面应该没有 ui_url_protocol 这个配置,并且手动加上这个配置也没有效果,安装的时候还是会使用https的形式,比如我这里安装的 2.0.4 的版本就是如此;这样的情况下我们将配置文件中的关于 https 的部分注释掉,然后再安装的话就会使用http的形式了。
在这里插入图片描述
d、安装harbor
执行解压后的 install.sh 可执行文件即可

./install.sh 或者 sh install.sh

注意:执行安装命令之后,会去检查安装harbor的这台服务器是否安装有 docker-compose 环境,如未安装会提示你安装多少版本以上的 docker-compose。
在这里插入图片描述
本文中 三、docker仓库 -> 4、安装docker-compose 介绍docker-compose的安装。
安装好docker-compose之后,再次执行安装文件;安装成功:
在这里插入图片描述
e、测试是否可以访问harbor
因为使用的是http,并且配置的是80端口,所以浏览器直接输入安装harbor的服务器的ip即可,如果不能访问可能是防火墙的原因,关闭防火墙或者防火墙放行端口,如果是阿里云服务器,放开该端口。
在这里插入图片描述
密码我未做修改,所以账号 admin,密码 Harbor12345
在这里插入图片描述
注意:我们搭建好harbor的私服之后,因为后面push image到这个私服上的时候,harbor会将image保存在安装harbor的目录中,所以保证刚刚解压harbor压缩包的目录有足够的磁盘空间存储image镜像。
到此私有镜像仓库通过Harbor安装完毕,下面进行image push到私有仓库中。

f、登录私有仓库即harbor

docker login ip:端口

如果不写端口的话,登录会采用https,而我们刚刚配置的是http,所以需要带上端口;因为我们之前修改配置文件的时候配置的http端口是80,所以我这里的登录命令就是:
docker login 192.168.152.129:80
但是问题出现了,我们并不会登录成功:
在这里插入图片描述
解决方案:
1.修改 /etc/docker/daemon.json 文件,如果没有会创建这个文件

vi /etc/docker/daemon.json

2.在 /etc/docker/daemon.json 文件中加入如下配置-必须要写端口不能只写ip

{
  "insecure-registries" : ["ip:端口"]
}

ip是安装harbor的服务器的ip,端口因为我们配置的是http使用的80端口;所以我这里是

{
  "insecure-registries" : ["192.168.152.129:80"]
}

在这里插入图片描述
3.重新加载 daemon.json

systemctl daemon-reload

4.重启docker

systemctl restart docker

在这里插入图片描述
到这里,重启docker之后,我们应该也不能通过网页访问harbor了,因为某一些和harbor相关的container处于关闭状态,比如我这里的nginx;以下的这些container都是安装harbor的时候自动运行的,并非我另外运行的。
在这里插入图片描述
5.重新安装harbor-这一步必须要做否则不成功(不论重启docker之后,是否可以访问harbor)
重新执行 install.sh 安装文件即可

./install.sh

6.再次登录harbor

docker login 192.168.152.129:80

根据自己的ip和端口修改下
在这里插入图片描述
成功登录上了。
g、tag标记image

docker tag 本地image名称 harbor服务器ip:端口/harbor中项目名称/上传到harbor中的image名称:tag

我这里是将本地的 test-member-image 上传到harbor的test项目下,harbor服务器的IP是 192.168.152.129 配置文件中配置使用http,端口号是80,所以我的tag命令如下:

 docker tag test-member-image 192.168.152.129:80/test/test-member-image:v1.0

注意:
1.必须写端口号,否则docker push的时候会和登录报错一样即443端口拒绝连接
2.push到test项目下,所以test项目在私服的harbor中必须存在
在这里插入图片描述
h、推送image到harbor私服中

docker push image:tag

根据上一步tag的内容,替换 image:tag 部分,所以我这里是

docker push 192.168.152.129:80/test/test-member-image:v1.0

在这里插入图片描述
i、查看私有harbor仓库中是否存在刚刚上传的image
在这里插入图片描述

4、安装docker-compose

如果是Windows或者mac系统的话,本身就有docker-compose环境,不需要进行安装;如果是Linux系统的话需要安装docker-compose。
官方安装docker-compose文档
执行以下两条命令即可
下载 Docker Compose:

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

其中 1.29.2 是安装的docker-compose的版本,我们这里安装harbor提示要求的是1.18.0及以上的版本,所以符合要求
因为是国外的网站,如果下载较慢可以考虑科学上网或者采用其他的方式安装,例如在GitHub上下载对应的版本进行安装;上面的 官方安装docker-compose文档 中也有GitHub的对应链接。

对二进制文件赋予可执行权限:

chmod +x /usr/local/bin/docker-compose

测试安装是否成功:

docker-compose --version

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 00:25:34  更:2021-07-14 00:25:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:18:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码