Docker常用操作指令及简介

1,基础

Docker是一种基于操作系统级别的虚拟化技术。

操作系统级虚拟化

是运行在操作系统之上的虚拟化技术,它模拟的是一个操作系统上的多个不同进程,并将其封装在一个密闭的容器里,改技术也称为容器化技术。Docker是目前最流行的一种实现,发布于2013年,基于lxc(linux container)技术,是linux平台上的容器化技术。起源于2010年,dotCloud.

硬件级虚拟化

是运行在硬件上的虚拟化技术,核心技术是Hypervisor(管理程序),它是一种运行在基础物理服务硬件上的软件层,可以虚拟化硬件资源。VMWare是一种基于硬件的虚拟化技术。

Docker是一个开源的应用容器引擎,它是基于google公司推出的GO语言实现的。它是一种轻量级别的虚拟化解决方案。注意:Docker本身不是容器,只是管理容器的引擎。

容器是将代码和环境打包在一起的一个集合,虚拟机是在物理层面上,分出来的操作系统。

多个容器可以运行在一个物理服务器上,并共享一个操作系统内核资源。

Docker和传统虚拟化方式的不同:

虚拟机有独立的操作系统;

Docker不需要独立的操作系统;启动秒级别启动,硬盘空间一般MB,性能接近原生,系统支持上千个,与宿主机共享操作系统;

2,Docker环境搭建

Empowering App Development for Developers | Docker

安装:

(1)切换到自己的目录,cd /home/soft/

yum insatll docker -y

(2)检查

yum list installed|grep docker

docker --version/docker -v

(3)卸载:

yum remove docker.x86_64

yum remove docker-client.x86_64

yum remove docker-common.x86_64

(4)启动

先确认一下:ps -ef|grep docker/systemctl status docker

启动:systemctl start docker

停止:systemctl stop docker

重启:systemctl restart docker

(2)docker常用指令

查看docker系统信息:docker info

查看所有帮助信息:docker

查看某个commond命令的帮助信息:docker commond --help 例如:docker wait --help

3,docker运行机制
        底层于运行原理:Docker服务启动->下载镜像->启动该镜像得到一个容器->容器里运行着我们想要的程序;

客户端-》Docker引擎-》远程镜像

1,服务启动

2,下载一个镜像,Docker运行前需本地存储对应的镜像,若不存在,会去远程镜像下载

默认:

Docker Hub

centos如何下载镜像:从docker hub搜索,官方搜索:https://hub.docker.com/search?type=image,也可以使用命令行搜索

docker search tomcat,然后下载:

下载镜像:docker pull tomcat

远程镜像:docker run tomcat (默认前台运行,后台运行加参数 -d :docker run -d tomcat)

显示本地已有的镜像:docker images

4,Docker容器访问机制

       Docker与linux基于桥接进行访问,需要做网络参数映射

查看当前运行的容器:docker ps

停止: docker stop cd00cba34aa0

再次查看:docker ps

再次启动(带端口映射):-p 8080:8080(端口映射)

docker run -d -p 8080:8080 tomcat

启动方式

可以使用容器名称或者容器ID

docker images

docker.io/tomcat    latest              fb5657adc892        4 days ago          680 MB

启动:

方式1:docker run -d  docker.io/tomcat

方式2:docker run -d  fb5657adc892

进入docker容器:

docker exec -it 1b02d7543739 bash

其中i表示交互式,保持标准输入流打开;t表示虚拟控制台,分配一个虚拟控制台;

ps:

选项

选项简写

说明

–detach

-d

在后台运行容器,并且打印容器id。

–interactive

-i

即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用。

–tty

-t

分配一个伪tty,一般与 -i 连用。

-i 选项指示 docker 要在容器上打开一个标准的输入接口,-t 指示 docker 要创建一个伪 tty 终端,连接容器的标准输入接口,之后用户就可以通过终端进行输入。

ls -l查看

退出容器:exit

tomcat9以上404解决:

首先执行docker run -d -p 8888:8080 tomcat

查看防火墙是否关闭service firewalld status

如果开启使用service firewalld stop:关闭防火墙

docker ps

1b02d7543739

使用 docker exec -it [tomcat的CONTAINER ID] /bin/bash 进入容器内部

使用ls -l查看目录

把webapps先改为webapps2 命令: mv webapps webapps2

再把webapps.dist改成webapps 命令:mv webapps.dist webapps

退出exit

重新访问浏览器就可以了

*如果tomcat页面还没出来,把浏览器关掉,重新打开访问

5,Docker核心组件

Docker容器通过Docker镜像来创建,类似于面型对象编程中类和对象的关系;

三要素:

镜像(Image),容器(Container),仓库(Repository)

(一)镜像:一个只读模板,用来创建Docker容器。可以自己创建镜像

bootfs:引导文件系统;Base Image:基本运行环境

镜像的日常操作:

(1)下载镜像:docker pull [镜像名字]:[版本号]

一种是官方下载,一种是自己构建镜像Docerfile

(2)列出已经下载的镜像:docker images redis

(3)运行镜像: docker run -d redis

(4)查看容器镜像状态:docker ps

(5)删除镜像:docker rmi redis:[版本号],注意rmi是删除镜像,rm是删除容器

(二)容器:从镜像创建的运行实例。它可以启动,停止,删除,每个容器相互隔离。

(1)通过镜像启动容器 :docker run -d redis

查看运行容器:docker ps

查看所有容器:docker ps -a

停止容器:docker stop 容器id/容器名称

开启容器:docker start 容器id/容器名称

(2)删除和创建容器(容器太轻量化,存在损失删除)

删除容器:docker rm  容器id/容器名称(删除容器是,容器必须停止)

进入容器:docker exec -it 容器id/容器名称 bash

进入容器:docker inspect 容器id/容器名称

复杂命令:

停用所有容器 docker stop ${docker ps -q}

删除容器 docker rm ${docker ps -aq}  解释:a:所有容器;q:运行的容器

停用并删除容器:docker stop ${docker ps -q}&docker rm ${docker ps -aq}

切换到docker目录

 cd /etc/docker/

小技巧:添加国内加速映射

vim daemon.json

{"registry-mirrors":["https://gg3gwnry.mirror.aliyuncs.com"]}

(三)仓库:仓库是集中存在镜像文件的场所。仓库和仓库注册服务器。仓库服务器包括很多仓库。

仓库分为公开仓库和私有仓库。

最大的仓库:https://hub.docker.com/

国内镜像:https://promotion.aliyun.com/ntms/act/kubernetes.html

私有仓库:公司内部

Docker仓库类似GIT,注册服务器类似github的托管服务;

(1)查找官方镜像:docker search redis

镜像分为两类:官方和非官方(用户创建)

下载镜像:docker pull [镜像名字]:[版本号]

6,docker容器安装

一,Mysql安装相关:

(1)下载docker pull mysql:[版本号]

(2)启动docker run -p 3306:3306 -e MYSQL_DATABASE=workdb[创建一个数据库] -e MYSQL_ROOT_PASSWORD=123456 -d mysql:[版本号]

其中-e指定环境变量

(3)进入容器:docker exec -it 容器id

(4)登陆mysql -uroot -p

(5)修改密码 AlTER USER 'root'@'localhost' IDENTIFIED BY '123456'

(6)创建一个test用户并授权远程登陆访问:

CREATE USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

GRANT ALL PRIVILEGES ON *.* to 'test'@'%';

二,Nginx安装

(1)下载docker pull nginx

(2)docker run -d -p 80:80 nginx

docker ps

(3)进入容器 docker exec -it 容器id bash

which nginx

(4)访问nginx:

nginx相关目录:

(5)将文件部署到docker

nginx部署静态网站

docker cp /home/soft/test.html 2da8b3e4899f:/usr/share/nginx/html

三、Zookeeper

(1)docker pull zookeeper

(2)docker run -d -p 2181:2181 zookeeper

(3)docker ps

(4)docker exec -it 987f804ea5c4 bash

(5)客户端访问zookeeper

Zookeeper数据查看工具ZooInspector

Zookeeper数据查看工具ZooInspector - 简书

1、下载

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

7,Docker自定义镜像

(1)Dockerfile文件:用来构建Docker进行,命令行组成。

Dockerfile分为4部分:

基础镜像信息;(必须)

维护者信息;

镜像操作指令;(必须)

容器启动时执行指令;

构建镜像:docker build -t [自定义名字] .

-t指定标签 .表示当前文件

docker build -f ./Dockerfile -t [自定义名字]  .

运行镜像:docker run -d

netstat命令不可用,安装net-tools:

yum install net-tools

net-tools工具箱包括arp, hostname, ifconfig, netstat, rarp, route, plipconfig, slattach, mii-tool and iptunnel and ipmaddr等命令。

# 基础镜像,继承的镜像

FROM  centos:7.0

# 声明作者,邮箱使用 ‘<>’,用户名不需要,可选

MAINTAINER root

# 执行命令,可选 &&连接符

#Run<commmand> Run指令将在当前镜像基础上执行指定命令,并提交新的镜像,连接符“\”

RUN yum install -y net-tools java-1.8.0-openjdk-devel && yum clean all

# 增加文件,可选,有 ADD 和 COPY 两种,不同之处在于:

#   ADD 会将压缩包解压,可能导致一些意外情况;COPY 不会

#   ADD 可以添加远程文件;COPY 不可以

# 值得注意的是 <src> 和 <dest> 路径最后的 ‘/’ 要根据需求对应,否则会成为子目录

#ADD <src> <dest>

COPY ./rec-content-creep-rpc/script/lib /data/rec-content-creep-rpc/script/lib

COPY ./rec-content-creep-rpc/script/run_server.sh /data/rec-content-creep-rpc/script/

# 配置环境变量,可选

#ENV <key> <value>

# 入口命令,可选,有 ENTRYPOINT 和 CMD 两种,不同之处在于:

#   docker-run 的指定命令不会覆盖 ENTRYPOINT,而是会追加到 ENTRYPOINT 之后;CMD 会被覆盖

#   CMD 也作为 ENTRYPOINT 的参数,比如

#       ENTRYPOINT ["ls"]

#       CMD ["-a", "-l"]

#   这样的默认入口进程为 /bin/sh -c "ls -a -l"

#ENTRYPOINT <command>

#ENTRYPOINT ["cmd", "arg1", "arg2"]

#CMD <command>

#CMD ["cmd", "arg1", "arg2"]

#指定容器执行的命令,每个Dockerfile只有一条CMD命令,若指定多条,只有一条会执行

CMD sh /data/rec-content-creep-rpc/script/run_server.sh

或者

CMD  /data/rec-content-creep-rpc/script/run_server.sh run

# 暴露的端口,可选

#告诉Docker服务器暴露的端口号,供调用使用,在启用容器时,需指定-p

# EXPOSE <port> [<port>...]

EXPOSE 8080

8,镜像加速器

阿里云:

开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

加速地址:

https://2k0tlj0y.mirror.aliyuncs.com

9,Docker应用部署

10,java -jar和java -cp有什么区别?

假如我们有一个程序,把它打包成Test.jar,如何运行才能成功输出Hello World

package com.test;

public class Test {

    public static void main(String[] args) {

        System.out.println("Hello World");

    }

}

我们有以下两种方法

1. java -jar Test.jar
2. java -cp com.test.Test Test.jar

java -jar

我们解压jar包,META-INF文件夹下都有MANIFEST.MF,内容如图:

MANIFEST.MF样例:

 

Manifest-Version: 1.0

Archiver-Version: Plexus Archiver

Built-By: xxxx

Start-Class: com.example.testApplication

Spring-Boot-Classes: BOOT-INF/classes/

Spring-Boot-Lib: BOOT-INF/lib/

Spring-Boot-Version: 2.1.1.RELEASE

Created-By: Apache Maven 3.3.9

Build-Jdk: 1.8.0_191

Main-Class:com.test.Test(org.springframework.boot.loader.JarLauncher)

java -jar就是通过Main-Class来找到Test类并执行其中的main(),输出Hello World!

如果你的MANIFEST.MF文件中没有Main-Class,

就会提示Cant load main-class之类的错误。

所以在导出jar包的时候一定要指定main-class。

java -cp

对于java -cp就不需要指定Main-Class来指定入口。

因为第个参数就是你的jar包个参数就指定了你的入口类

它会根据你的jar包找到第一个参数指定的启动类。

-cp其实就是classpath,在linux中多个jar包用 : 分割,代表了程序运行需要的所有jar包。这样就可以不用将所有依赖都放到Test.jar下.这样做的好处就是,假如修改了Test类,只上传修改后的Test.jar到服务器即可,不需要再将所有依赖放到Test.jar中再上传一遍,节约了时间。

linux(Mac)格式:

java -cp .:你的jar包路径 主类的全限定名称

举例:

java -cp .: myClass.jar org.springframework.boot.loader.JarLauncher

注意:

windows下为:.;myClass.jar

通配符版本:

java ${jvm_opt} ${system_prop} -cp .:${JAR_NAME} ${MAIN_CLASS}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值