7.17学习笔记(自用)

105 阅读5分钟

docker容器方面

以下内容整理自通过 Desktop 学 Docker 也太简单了 (qq.com)

由于docker以前学习区块链的时候有所了解,所以环境部署就不说了,主要介绍一下docker以及其命令。

首先什么是docker?

它把系统的所有文件封装成一个镜像,镜像跑起来作为容器,它可以在一台机器上跑多个容器,每个容器都有独立的操作系统环境,比如文件系统、网络端口等,在容器内跑各种服务。这样整个环境都保存在这个镜像里,部署多个实例只要通过这个镜像跑多个容器就行。

Docker 提供了 Docker Hub 镜像仓库,可以把本地镜像 push 到仓库或者从仓库 pull 镜像到本地。

image.png

docker有关命令

收集自(Docker 命令大全 | 菜鸟教程 (runoob.com)) 只留下几个个人觉得用的多的。

docker run :创建一个新的容器并运行一个命令

实例

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run --name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。 $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。 runoob@runoob:~$ docker run -it nginx:latest /bin/bash root@b8573233d675:/#

Docker start/stop/restart 命令

实例 启动已被停止的容器myrunoob

docker start myrunoob

停止运行中的容器myrunoob

docker stop myrunoob

重启容器myrunoob

docker restart myrunoob

Docker kill 命令

docker kill :杀掉一个运行中的容器。

实例

杀掉运行中的容器mynginx

runoob@runoob:~$ docker kill mynginx

Docker rm 命令

实例

强制删除容器 db01、db02:

docker rm -f db01 db02

移除容器 nginx01 对容器 db01 的连接,连接名 db:

docker rm -l db

删除容器 nginx01, 并删除容器挂载的数据卷:

docker rm -v nginx01

删除所有已经停止的容器:

docker rm $(docker ps -a -q)

Docker create 命令

docker create :创建一个新的容器但不启动它

用法同 docker run

docker ps命令

列出所有在运行的命令

Docker images 命令

docker images : 列出本地镜像。

这个一般在根据id删除镜像里面用的比较多来着 。

语法 docker images [OPTIONS] [REPOSITORY[:TAG]] OPTIONS说明:

-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

--digests :显示镜像的摘要信息;

-f :显示满足条件的镜像;

--format :指定返回值的模板文件;

--no-trunc :显示完整的镜像信息;

-q :只显示镜像ID。

刷题方面

今天的Leetcode每日一题难度较小。是一个字符串相加的题。详细如下:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 
也不能直接将输入的字符串转换为整数形式。

示例 1:
输入:num1 = "11", num2 = "123"
输出:"134"
示例 2:
输入:num1 = "456", num2 = "77"
输出:"533"
示例 3:
输入:num1 = "0", num2 = "0"
输出:"0"

选择使用go语言进行解题。由于对go语言不算熟悉。所以开始是直接使用强制转化类型,想将字符串转换为int类型(想多了)。

然后失败以后,大概猜到要进行按位加操作。刚开始第一次写的代码是这样的

func addStrings(num1 string, num2 string) string {
    var x,y int
    var ans=""
    var add=0
    x=len(num1)-1
    y=len(num2)-1
    for x>=0||y>=0 {
        var a,b int
        if x>=0{
            a=int(num1[x]-'0')
        }
        if y>=0{
            b=int(num2[y]-'0')
        }
        result :=a+b+add
        add = result / 10
        ans = strconv.Itoa(result%10) + ans   
        x=x-1
        y=y-1
    }
    return ans
 }

结果有一种样例没法通过(即a=1,b=9)此时add=1,ans=0.最后输出的是0而不是答案10。 想要解决这个问题也挺简单的,最后加一个条件判断即可。

if add > 0 {
    ans = strconv.Itoa(add) + ans
}

最后,不得不提的是,初始化,用:=比较简单,乐。 比如这样val1:= int(24)

整体的解决思路很简单,稍微写一下关于strconv.Itoa的知识

以下内容摘抄自Golang strconv.Itoa()用法及代码示例 - 纯净天空 (vimsky.com)

Go 语言提供内置支持,以通过 strconv 包实现与基本数据类型的字符串表示之间的转换。这个包提供了一个 Itoa() 函数,它相当于 FormatInt(int64(x), 10)。或者换句话说,Itoa() 函数在基数为 10 时返回 x 的字符串表示。要访问 Itoa() 函数,您需要在程序中借助 import 关键字导入 strconv 包。(简而言之,go提供从int转换成字符串的操作

用法:

func Itoa(x int) string 参数:该函数接受一个 int 类型的参数,即 x。

返回值:此函数返回一个表示 x 的字符串。

范例1:

// Golang program to illustrate
// strconv.Itoa() Function
package main
  
import (
    "fmt"
    "strconv"
)
  
func main() {
  
    // Finding a string representation of
    // the given value when the base is 10
    // Using Itoa() function
    val1:= int(24)
    res1:= strconv.Itoa(val1)
    fmt.Printf("Result 1:%v", res1)
    fmt.Printf("\nType 1:%T", res1)
  
    val2:= int(-21)
    res2:= strconv.Itoa(val2)
    fmt.Printf("\nResult 2:%v", res2)
    fmt.Printf("\nType 2:%T", res2)
  
}

输出:

Result 1:24
Type 1:string
Result 2:-21
Type 2:string

未解决问题

虚拟机如何连接内网

首先知道连接不上的原理了解桥接,nat,主机三个模式。 主机连接wifi时,虚拟机VMware如何连接网络_主机连wifi创建vmware虚拟机_LS_learner的博客-CSDN博客)

一张抽象的画(

image.png

看完以后个人感觉连接不上的原因是,我按照VM虚拟机如何在局域网内相互访问_vm虚拟机局域网访问___walden的博客-CSDN博客这个配置教程走,但是却没有输入内网的ip地址。

看到一篇写的挺好的解决方法,放这以防忘记(VmWare网络配置,只此一篇就够了 - 个人文章 - SegmentFault 思否)

我好像找到了为啥本地访问不了虚拟机的原因了,悲。