Docker基础命令

常用工具:
WinSCP //类型ftp软件 (windows系统用)
SecureCRT //类型xshell (windows系统用)

官网地址:
https://docs.docker.com/
去官网注册一个自己的账号

docker在线手册
https://yeasy.gitbook.io/docker_practice/

和官网的用的同一个账号登陆,可以去官网注册一个账号
https://labs.play-with-docker.com/

视频学习地址:
https://www.bilibili.com/video/BV1og4y1q7M4 (【狂神说Java】Docker最新超详细版教程通俗易懂)
https://www.bilibili.com/video/BV1kv411q7Qc?t=3 (狂神说Java】Docker进阶篇超详细版教程通俗易懂)

https://www.bilibili.com/video/BV1jz411q7f4?p=5 (B站最棒Docker从入门到精通适合新手)

https://www.bilibili.com/video/BV1sK4y1s7Cj?p=11 (2020 Docker最新超详细版教程通俗易懂)
https://www.lixian.fun/3812.html (同学笔记)

docker命令:



Docker的中央仓库
http://hub.daocloud.io/

    1.Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。
    https://hub.docker.com/
    2.国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。
    https://c.163yun.com/hub#/home 
    http://hub.daocloud.io/ (推荐使用)
    3.在公司内部会采用私服的方式拉取镜像(添加配置)
    #需要创建 /etc/docker/daemon.json,并添加如下内容
    {
    	"registry-mirrors":["https://registry.docker-cn.com"],
    	"insecure-registries":["ip:port"]
    }
    #重启两个服务
    systemctl daemon-reload
    systemctl restart docker
# 管理docker
systemctl enable docker //开启启动
systemctl start docker //启动
docker --version 或者 docker -v
systemctl stop docker //停止
systemctl restart docker //重启
docker //列表所有docker命令
docker image -h //查看image命令的帮助

# 搜索镜像
# 从网络中查找需要的镜像 
docker search centos #镜像名称
# 说明
#NAME : 仓库名称                               
#DESCRIPTION  : 镜像描述                                    
#STARS        : 用户评价       
#OFFICIAL     : 是否为官方       
#AUTOMATED    : 自动构建,表示该镜像由Docker Hub自动构建流程创建的     


# 管理本地image镜像 拉取/查看/历史/删除
docker pull centos/mysql-57-centos7
docker pull 镜像名称 //例:docker pull centos:7
docker image ls //列出本地的镜像
docker images //列出本地的镜像
docker history 97b46f5bffb8 //看一下镜像的详情 97b46f5bffb8是IMAGE ID值 
docker rmi image镜像名字/IMAGE ID //删除本地image镜像 (注意有运行中的容器是不能删除的)
docker rmi `docker images -q` //删除所有镜像
docker image prune -a //删除无用镜像(需要收到输入y)
docker image prune -a -f //强制删除镜像
docker rm `docker ps -a | grep Exited | awk '{print $1}'` //删除异常停止的docker容器
docker rmi -f  `docker images | grep '<none>' | awk '{print $3}'`  // 删除名称或标签为none的镜像
docker tag <REPOSITORY>:<TAG> <NEW_REPOSITORY>:<TAG> // 修改本地镜像的仓库名称
docker tag <REPOSITORY>:<TAG> <REPOSITORY>:<NEW_TAG> //修改本地镜像的标签名称


# 容器的管理
OPTIONS(常用选项)
-i, --interactive 表示运行容器
-t, --tty 表示容器启动后会进入其命令行.加入这两个参数后,容器创建就能登录进去.即分配一个伪终端
--name 为创建的容器命名
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录).可以使用多个-v做多个目录或者 文件映射.注意:最好做目录映射.在宿主机上做修改.然后共享到容器上.
-d, --detach 在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登陆容器,如果加-i -t两个参数,创建后就会自动进去容器).
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口.可以使用多个-p做多个端口映射
-a, --attach list

# 下载并运行镜像
(1) 下载镜像
docker pull ubuntu:14.04 //从官方下载ubuntu:14.04镜像,但不运行
(2) 运行
docker run hello-world //运行hello-world镜像(如果本地仓库里没有,会从官方下载安装后再运行)
docker run centos  //下载并运行实例centos
(3) 交互式方式创建容器
docker run -it centos //交互式运行centos镜像
docker run -itd centos  //后台运行实例centos
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
docker run -it --name=mycentos centos:7 /bin/bash

//后台运行实例 不进入容器 busybox是比centos小的linux 一直跑命令
docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done" 

# 管理本地container 查看/删除/停止/重启/启动历史中已经停止的容器(container)
# 管理已经运行的container

# 查看container
docker container ls //查看正在运行的实例
docker container ls -a //查看所有实例,包括已经关闭的实例
docker container ls -aq //列出所有的记录id
docker ps //查看正在运行的实例
docker ps -l //查看最后一次运行的容器
docker ps -a //查看所有实例,包括已经关闭的实例
docker ps -aq //列出所有的记录id
docker ps -f status=exited //查看停止的容器
docker container ls -f "status=exited" -q //列表出所有已经退出的历史实例id

# 进入容器container
docker exec --help //这种方式针对于运行为守护进程daemon模式的容器,进入后exit退出容器进程不会终止。
docker exec -it 0923d012374b /bin/bash // 进入后台运行的container
docker exec -it 0923d012374b /bin/sh // 进入后台运行的container
exit //退出运行中的centos实例 如果是exec进入container中的,不会结束进程

# 删除container
docker rm 441bf7168dee //删除指定的`CONTAINER ID`的历史记录(注意运行中的容器是不能删除的)
docker rm -f 441bf7168dee //删除指定的`CONTAINER ID`的记录(可以删除运行中的容器)
docker rm $(docker container ls -aq)  //删除所有的记录
docker rm $(docker ps -aq) //删除所有的记录
docker rm $(docker container ls -f "status=exited -q") //删除已经退出的实例历史

# container 停止/重启/启动历史中已经停止的容器(container)
docker start 容器id //启动容器记录里已经停止的容器
docker stop 0923d012374b //结束后台运行中的container 用容器的名字也可以
docker stop $(docker container ls -aq) //结束后台运行中的所有container
docker restart container-id # 重启某个容器

# 批量操作容器

docker 启动所有的容器
docker start $(docker ps -aq)
docker start $(docker container ls -aq)
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker 关闭所有的容器
docker stop $(docker ps -aq)
docker stop $(docker container ls -aq)
docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker 删除所有的容器
docker rm $(docker ps -aq)
docker rm $(docker container ls -aq)
docker rm $(docker ps -a | awk '{ print $1}' | tail -n +2)

docker 删除所有的镜像
docker rm $(docker images -qa)
docker rmi $(docker images | awk '{print $3}' |tail -n +2)

# 基于运行过的容器,再创建一个image镜像
docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
docker commit CONTAINER_ID 127.0.0.1:9091/512/f-search/centos-hbb:latest //基于CONTAINER_ID创建新的镜像 CONTAINER_ID是镜像的NAMES值 ,latest是版本号


# 登陆dockerHub账号

docker login

 `docker login 公网ip地址 -u wanghaima -p 密码`

# 上传本地镜像到线上仓库里

docker image push wanghaima/hellogo:v1.0 //前缀一定是自己的dockerHub用户名字

# 上传成功后就可以把本地的镜像删除了
# 下载线上仓库镜像到本地仓库里

docker image pull wanghaima/hellogo:v1.0

# 文件的拷贝
docker cp #停止或者运行中的容器都可以用cp互传文件
## 从宿主机复制文件到容器里
docker cp 宿主机的文件或者目录 容器:宿主机的文件或者目录
docker cp a.txt mycentos:/usr/local
## 从容器里复制文件到宿主机
docker cp 容器:宿主机的文件或者目录 宿主机的文件或者目录 
docker cp mycentos:/usr/local/a.txt a.txt2
docker cp b42e5c9f385a:/usr/share/nginx/html ./html # html为文件夹

# 目录挂载
创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而云影响容器.
创建容器 添加-v参数 后边为 宿主机目录:容器目录 例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
docker run -id -v /www/wwwroot:/www/wwwroot --name=mycentos7 centos:7

#查看容器IP地址
在没有进入容器时输入命令
//使用docker inspect命令获取容器/镜像的元数据。
docker inspect 容器id 
//获取指定容器的ip
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 68f0d84be6ad
//获取所有容器ip
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

如果你共享的是多极目录,可能会出现权限不足的提示.
这是因为centos7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true来解决的挂载的目录没有权限的问题

vim Dockerfile //制作镜像,必需是这个文件名字,不能更改,里面的关键字尽量大写字母
docker build -t 自己的dochub的用户名字/要生成镜像的名字 .  //点是根据当前目录里的Dockerfile去创建一个目录镜像
docker build -t wanghaima/hellogo .
docker run wanghaima/hellogo //docker运行刚制作的go镜像程序

ip netns list //查看本机namespace的ip
ip netns add test1 //增加namespace的ip
ip netns delete test1 //删除namespace的ip

底层技术支持

  • Namespace:做网络隔离
  • Control goups:做资源限制,例如设置占用多少内存,CPU
  • Union file systems:image和container分层

安装go环境

1.上传go的安装包(go1.13.linux-amd64.tar.gz,自己从官网下载)到服务器的/usr/local目录里
2.解压到/usr/local/go
tar -zxvf go1.13.linux-amd64.tar.gz

3.设置go的环境变量

vim /etc/profile

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=/home/work/go

//保存并退出
wq!

刷新配置,使环境变量生效
. /etc/profile

4.新建/home/work/go文件夹作为工作目录
/home/work/go文件夹里建三个目录

pkg
src
bin

/home/work/go/src/test目录里写一个go文件编译运行一下

package main

import "fmt"

func main(){
   fmt.Println("hello go !")
}

go build main.go
./main

打印结果:

hello go !

制作baseImage

  • baseIamge:基于系统的基础镜像

如果想要用docker运行,方法:

  • a.从官网镜像里去拉取image镜像.
  • b.自己制作镜像.
  • c.基于image创建container之后,如在container做了一些变化后,例如安装了某个软件,可以将这些改变commit成一个新的image,也可以简写为docker commit

一.自己制作镜像:

1.新建一个Dockerfile

/home/work/go/src/test目录里新建一个Dockerfile

vim Dockerfile //必需是这个文件名字,不能更改,里面的关键字尽量大写字母

写入

#从头开始
FROM scratch
#把编译好的hellogo二进制文件加到当前根目录
ADD hellogo /
#运行同目录里编译好的hellogo二进制文件
CMD ["/hellogo"]

2.构建docker image
编辑镜像并上传到自己的dockerhub仓库里
命令格式:
docker build -t 自己的dochub的用户名字/要生成镜像的名字 . //点是根据当前目录里的Dockerfile去创建一个目录镜像

docker build -t wanghaima/hellgo .

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker build -t wanghaima/hellogo .
Sending build context to Docker daemon  2.001MB
Step 1/3 : FROM scratch
 ---> 
Step 2/3 : ADD hellogo /
 ---> Using cache
 ---> 4393a483c25b
Step 3/3 : CMD ["/hellogo"]
 ---> Using cache
 ---> 97b46f5bffb8
Successfully built 97b46f5bffb8
Successfully tagged wanghaima/hellogo:latest

docker image ls //看一下镜像列表里在有没有刚新建的hellogo镜像

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wanghaima/hellogo   latest              97b46f5bffb8        7 minutes ago       2MB
hello-world         latest              fce289e99eb9        13 months ago       1.84kB

docker history 97b46f5bffb8 //看一下镜像的详情 97b46f5bffb8是IMAGE ID值

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker history 97b46f5bffb8
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
97b46f5bffb8        11 minutes ago      /bin/sh -c #(nop)  CMD ["/hellogo"]             0B                  
4393a483c25b        11 minutes ago      /bin/sh -c #(nop) ADD file:4da8154008532799e…   2MB 

3.docker运行刚制作的go镜像程序
docker run wanghaima/hellogo

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker run wanghaima/hellogo
hello go !     
[root@iZ2ze505h9bgsbp83ct28pZ test]# pwd
/home/work/go/src/test
[root@iZ2ze505h9bgsbp83ct28pZ test]# ls
Dockerfile  hellogo  hellogo.go

至此已经完成一个go的镜像制作了.并可以用docker命令跑起这个镜像了.

container

container是一个运行的实例

docker container ls //查看正在运行的实例
docker container ls -a //查看所有实例,包括已经关闭的实例

下载并交互式运行实例centos
docker run centos

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker run -it centos
[root@383d32aab2fc /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

另开一个窗口连接上服务器
可以看到正在运行的centos实例

[root@iZ2ze505h9bgsbp83ct28pZ ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
383d32aab2fc        centos              "/bin/bash"         3 minutes ago       Up 3 minutes                            zen_almeida

退出(释放)在运行的实例:

[root@383d32aab2fc /]# exit
exit

删除指定的CONTAINER IDwanghaima/test 历史记录

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
383d32aab2fc        centos              "/bin/bash"         11 minutes ago      Exited (0) 3 minutes ago                           zen_almeida
66c4da129e62        centos              "/bin/bash"         15 minutes ago      Exited (0) 15 minutes ago                          loving_neumann
a563fab0f2e7        wanghaima/hellogo   "/hellogo"          About an hour ago   Exited (0) About an hour ago                       eloquent_ptolemy
441bf7168dee        wanghaima/test      "/hellogo"          About an hour ago   Exited (0) About an hour ago                       gifted_swanson
ea2df88fd144        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             nervous_golick
c019b34a33d8        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             cocky_kowalevski
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container rm 441bf7168dee
441bf7168dee
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
383d32aab2fc        centos              "/bin/bash"         12 minutes ago      Exited (0) 4 minutes ago                           zen_almeida
66c4da129e62        centos              "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                          loving_neumann
a563fab0f2e7        wanghaima/hellogo   "/hellogo"          About an hour ago   Exited (0) About an hour ago                       eloquent_ptolemy
ea2df88fd144        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             nervous_golick
c019b34a33d8        hello-world         "/hello"            4 hours ago         Exited (0) 4 hours ago                             cocky_kowalevski
[root@iZ2ze505h9bgsbp83ct28pZ test]# 

删除所有的contailner实例列表

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -aq //列出所有的记录id
383d32aab2fc
66c4da129e62
a563fab0f2e7
ea2df88fd144
c019b34a33d8
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -aq)  //删除所有的记录
383d32aab2fc
66c4da129e62
a563fab0f2e7
ea2df88fd144
c019b34a33d8

删除已经退出的实例历史
docker rm $(docker container ls -f "status=exited" -q)

[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a  //列表出所有的历史实现例
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
9dfe4446e89f        centos              "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       hardcore_austin
4346ebd939f0        hello-world         "/hello"            2 minutes ago        Exited (0) 2 minutes ago                            reverent_tereshkova
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -f "status=exited" -q //列表出所有已经退出的历史实例id
9dfe4446e89f
4346ebd939f0
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -f "status=exited -q")
Error response from daemon: Invalid filter 'status=exited -q'
"docker rm" requires at least 1 argument.
See 'docker rm --help'.

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker rm $(docker container ls -f "status=exited" -q)
9dfe4446e89f
4346ebd939f0
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f02f744e125b        centos              "-it centos"        5 minutes ago       Created                                 jovial_feynman
[root@iZ2ze505h9bgsbp83ct28pZ test]#

二.基于改变后的image再创建一个新的image:

docker container ls -a //看一下运行过的镜像历史
docker run -it centos //进入镜像
yum -y install lrzsz //安装上传下载软件
exit //退出
docker container ls -a //看一下运行过的镜像历史
docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
docker image ls //看一下新的镜像已经创建出来
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wanghaima/hellogo   latest              97b46f5bffb8        5 hours ago         2MB
wanghaima/test      latest              97b46f5bffb8        5 hours ago         2MB
centos              latest              470671670cac        12 days ago         237MB
hello-world         latest              fce289e99eb9        13 months ago       1.84kB
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker run -it centos  //进入镜像
[root@e64b767680a7 /]# yum -y install lrzsz
Installed:
  lrzsz-0.12.20-43.el8.x86_64                                                                            

Complete!
[root@e64b767680a7 /]# exit
exit
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker container ls -a //看一下运行过的镜像历史
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
e64b767680a7        centos              "/bin/bash"         9 minutes ago       Exited (0) 54 seconds ago                         sleepy_ride
e47a5aed7f3c        centos              "/bin/bash"         10 minutes ago      Exited (0) 10 minutes ago                         confident_goldberg
d05f46e55c69        centos              "/bin/bash"         26 minutes ago      Exited (0) 24 minutes ago                         adoring_hamilton
8c39d290b5aa        centos              "/bin/bash"         43 minutes ago      Exited (0) 43 minutes ago                         boring_pasteur
f5213541cf7f        centos              "/bin/bash"         45 minutes ago      Exited (137) 34 minutes ago                       epic_hermann
f02f744e125b        centos              "-it centos"        4 hours ago         Created                                           jovial_feynman
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker commit sleepy_ride wanghaima/centos-hbb //基于sleepy_ride创建新的镜像 sleepy_ride是镜像的NAMES值 也可以用CONTAINER ID
sha256:30924d365cb9b8da2658efb1c1cac536125e3cbfd3a379176dd91d4487a0611e
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker image ls //看一下新的镜像已经创建出来
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
wanghaima/centos-hbb   latest              30924d365cb9        52 seconds ago      271MB
wanghaima/hellogo      latest              97b46f5bffb8        6 hours ago         2MB
wanghaima/test         latest              97b46f5bffb8        6 hours ago         2MB
centos                 latest              470671670cac        12 days ago         237MB
hello-world            latest              fce289e99eb9        13 months ago       1.84kB
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker history centos //看一下两个镜像有什么不一样
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
470671670cac        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           12 days ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:aa54047c80ba30064…   237MB               
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker history wanghaima/centos-hbb //看一下两个镜像有什么不一样
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
30924d365cb9        16 minutes ago      /bin/bash                                       33.9MB              
470671670cac        12 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           12 days ago         /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:aa54047c80ba30064…   237MB 

Dockerfile详解

  • FROM: 文件的开始

    FROM scratch    #从头开始制作一个最简的

    FROM centos    #使用centos为系统,若没有则位取

    FROM centos:7.0 #指点系统+版本号

  • LABEL:相当于注释或者说明信息(LABEL 后面的随便写)

    LABEL version="1.0"

    LABEL author="haima"

  • RUN:执行命令,每执行一条RUN,就多一层

    RUN yum -y update && yum -y install lrzsz \

    ​ net-tools

  • WORKDIR:进入或者创建目录

    WORKDIR /root  #进入/root目录

    WORKDIR /test  #自动创建目录

    WORKDIR demo #自动创建目录

    RUN pwd    #/test/demo

  • ADD and COPY :将本地文件,添加到镜像里

    ADD可以解压缩文件 COPY不能解压

    ADD hello/

    ADD xxx.tar.gz #添加并解压到根目录

    WORKDIR /root/test #进入/root/test目录,如果没有就创建COPY hello . #最终在/root/test/hello目录

  • ENV

    ENV MYSQL_VERSION 5.6 #设置常量

    RUN apt-get -y install mysql-server="${MYSQL_VERSION}"

  • CMD and ENTRYPOINT

    • shell格式

      RUN apt-get -y install lrzsz

      CMD echo "hello docker"

      ENTRYPOINT echo "hello docker" #和上面一行一样,都 是执行一条cmd命令

      #shell格式
      FROM centos
      ENV name Docker
      ENTRYPOINT echo "hello $name"
      

      制作镜像 vim Dockerfile

      docker build -t centos-entry-shell .
      
      docker image ls
      
      docker run centos-entry-shell 
      
      
    • exec格式

      RUN ["apt-get","-y","install","lrzsz"]

      #exec格式
      FROM centos
      ENV name Docker
      #ENTRYPOINT ["/bin/echo","hello $name"] #不会替换常量
      ENTRYPOINT ["/bin/bash","-c","echo hello $name"] #不会替换常量
      

      制作镜像 vim Dockerfile

      docker build -t centos-entry-exec .
      
      docker image ls
      
      docker run centos-entry-exec
      
      

CMD and ENTRYPOINT的区别

  • 若定义了多个CMD命令,只会执行最后一个
  • CMD和ENTRYPOINT指令都可以用来定义运行容器时所使用的默认命令
  • Dockerfile至少指定一个CMD或ENTRYPOINT
  • CMD或ENTRYPOINT同时存在时,运行时CMD会拼在ENTRYPOINT后面作为默认参数
  • docker run指定时指定了其他命令,将会覆盖CMD
  • 如果是可执行文件,希望运行时传参,应该使用ENTRYPOINT


详细参考下面文档:
https://zhuanlan.zhihu.com/p/361293395

分享docker image

不建议分享image,自己的电脑可能会有病毒等等问题

  1. 注册账号

 在https://hub.docker.com 网站上注册一个账号,dockerHub也是用同一个账户

image名字一定要以自己的docker hub的用户名开头

  1. 登陆
[root@iZ2ze505h9bgsbp83ct28pZ test]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: wanghaima
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

或者
docker login 公网ip地址 -u wanghaima -p 密码

  1. 上传本地镜像到线上仓库里

docker image push wanghaima/hellogo:v1.0 //前缀一定是自己的dockerHub用户名字

上传成功后就可以把本地的镜像删除了

  1. 下载线上仓库镜像到本地仓库里

docker image pull wanghaima/hellogo:v1.0

分享Dockerfile

建议分享Dockerfile,用户可以自己编译,更加安全

创建线上仓库

docker仓库要和自己的github仓库关联上.

在本地搭建docker registry私有仓库

github是公有的,也可以创建自己的私有仓库

1.在官网搜索registry

打开第一个镜像
https://hub.docker.com/_/registry

2.下载仓库的image镜像

[root@iZ2ze505h9bgsbp83ct28pZ docker]# docker run -d -p 5000:5000 --restart always --name registry registry:2 //下载仓库的image镜像
Unable to find image 'registry:2' locally
2: Pulling from library/registry
486039affc0a: Pull complete 
ba51a3b098e6: Pull complete 
8bb4c43d6c8e: Pull complete 
6f5f453e5f2d: Pull complete 
42bc10b72f42: Pull complete 
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:2
81e2c3f5a1674c3e3a6da85027a0087644643fd228da2601a6761d6fc2230eb6
[root@iZ2ze505h9bgsbp83ct28pZ docker]# docker image ls //看下载的registry镜像
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
wanghaima/centos-hbb   latest              30924d365cb9        13 hours ago        271MB
wanghaima/hellogo      latest              97b46f5bffb8        19 hours ago        2MB
wanghaima/test         latest              97b46f5bffb8        19 hours ago        2MB
registry               2                   708bc6af7e5e        6 days ago          25.8MB
centos                 latest              470671670cac        12 days ago         237MB
hello-world            latest              fce289e99eb9        13 months ago       1.84kB
[root@iZ2ze505h9bgsbp83ct28pZ docker]# docker ps //查看运行的进程 registry已经跑起来了
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
81e2c3f5a167        registry:2          "/entrypoint.sh /etc…"   37 minutes ago      Up 17 minutes       0.0.0.0:5000->5000/tcp   registry


3.另一台服务器(下面简称B)就可以talnet连接这台安装了registry仓库的docker服务器(下面简单A ip:192.168.16.185)了

telnet 192.168.16.185 5000 //连接
quit 退出

4.B服务器编译一个image //要以A服务器的ip地址为前綴

docker build -t 192.168.16.185:5000/centos .

5.B服务器deamon.json里添加信任A服务器ip地址

vim /etc/docker/deamon.json
加入`"insecure-registries":["192.168.16.185:5000"],`

{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"insecure-registries":["192.168.16.185:5000"],
"dns": ["8.8.8.8","8.8.4.4"]
}

6.B服务器push镜像到A服务器里
docker push 192.168.16.185:5000/centos

此时已经push成功了

7.在浏览器里可以查一下

`192.168.16.185:5000/v2/_catalog`

8.B服务器里删除本地的刚push的镜像,再从A服务器里pull下来试试

docker rmi 192.168.16.185:5000/centos //删除本地image镜像
docker image ls //查看镜像是否被删除
docker pull 192.168.16.185:5000/centos //拉取A服务器上的镜像
docker image ls //查看镜像是下载回来

docker的网络

1.网络分类
- 单机
-Bridge Network //同一个内网里的机子可以相互访问
-Host Network //容器之间可以相互访问
-None Network //单机网络
- 多机
-Overlay Network //集群网络

2.linux的网络命名空间
命名空间是docker底层重要的概念


[root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns add test1
[root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns list
test1
[root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns delete test1
[root@iZ2ze505h9bgsbp83ct28pZ local]# ip netns list

ip netns add test1
ip netns delete test1
ip netns list
ip netns exec test1 ip a
ip netns exec test1 ip link set dev lo up
ip netns exec test1 ip a
ip netns add test2
ip netns list
ip link add veth-test1 type veth peer veth-test2 //指定veth对
ip link //看本机的所有的网卡

ip link set veth-test1 netns test1 //把veth对加入test1的namespace空间里
ip netns exec test1 ip link //看test1的namespace空间里ip的状态
ip link set veth0 netns test2 //把veth0对加入test2的namespace空间里
ip netns exec test2 ip link //看test2的namespace空间里ip的状态

端口映射

docker run --name web2 -d -p 80:80 nginx  //端口映射 容器里的商品映射给本机
posted @ 2020-01-30 07:11  HaimaBlog  阅读(514)  评论(0编辑  收藏  举报