docker 入门级常用命令

文章目录

    • 前言
    • Ⅰ. 镜像
        • 一、创建镜像
          • 1. 拉取镜像
          • 2. Dockerfile创建镜像
          • 3. 基于已有容器创建镜像
        • 二、管理镜像
          • 1. 查看所有的镜像
          • 2. 移除镜像
          • 3. 重命名镜像
        • 三、Dockerfile[×]
    • Ⅱ.容器
        • 一、创建容器
          • 1. 创建后台运行的容器
          • 2. 创建容器并前台执行
          • 3. 查看容器
        • 二、进入容器
          • 1. exec命令
          • 2. attach命令
          • 3. ssh连接
          • 4. 使用nsenter
        • 三、管理容器
          • 1. 运行容器
          • 2. 停止容器
          • 3. 移除容器
          • 4. 重命名容器
          • 5. 容器日志
        • 四、网络配置
          • 1. 预定类型
          • 2. 自定义类型
        • 五、容器数据—volume操作
          • 1. 寻找真实宿主目录
          • 2. 挂载宿主目录
          • 3. 共享数据容器
    • Ⅲ.镜像仓库
        • 一、简单操作
        • 二、搭建私有仓库
          • 1. 搭建http镜像仓库
          • 2. 搭建https镜像仓库[×]
          • 3. 查询镜像列表
        • 三、设置客户端连接方式
          • 1. windows 下客户端设置
          • 2. linux 下客户端设置
          • 3. 证书
    • Ⅳ.编排[×]
    • ~~附Ⅰ.Xshell登陆 docker 虚拟机~~
    • 附Ⅱ.使用docker toolbox 可能遇到的问题

前言

在docker的很多操作中,命令行输入的参数如镜像ID和操作容器ID等,都可以分别替换成镜像名和容器名。

Ⅰ. 镜像

一、创建镜像

1. 拉取镜像
# 搜索名为IMAGE_NAME的镜像
$ docker search IMAGE_NAME

# 拉取名为IMAGE_NAME的镜像
$ docker pull IMAGE_NAME

# 拉取版本为1.1.1的镜像
$ docker pull IMAGE_NAME:1.1.1
2. Dockerfile创建镜像
# 使用当前目录下(.)的Dockerfile文件创建名为IMAGE_NAME标签为IMAGE_TAG的镜像
$ docker build -t IMAGE_NAME:IMAGE_TAG .
3. 基于已有容器创建镜像
# 基于已有容器创建镜像
$ docker commit -m "提交信息" -a "作者" CONTAINER_ID IMAGE_ID

二、管理镜像

1. 查看所有的镜像
$ docker images
2. 移除镜像

不能移除容器中运行着的镜像

# 移除ID为IMAGE_ID镜像
$ docker rmi IMAGE_ID

# 移除所有镜像
$ docker rmi -f $(docker images -q)
3. 重命名镜像
# 将镜像IMAGE_ID重命名为IMAGE_NAME标签为IMAGE_TAG
$ docker tag IMAGE_ID IMAGE_NAME:IMAGE_TAG

三、Dockerfile[×]


Ⅱ.容器

假设容器ID为CONTAINER_ID

一、创建容器

1. 创建后台运行的容器
$ docker run [ --net host] [--name CONTAINER_NAME] -d [-p HOST_PORT:CONTAINER_PORT] IMAGE_ID
2. 创建容器并前台执行
# 创建容器运行 IMAGE_ID 镜像,并执行 COMMAND 命令
# 此外可以使用-it 参数可以形成交互式的新窗口
$ docker run IMAGE_ID COMMAND
# 举个例子
$ docker run java /bin/echo "hello world"
3. 查看容器
$ docker ps

格式化输出 $ docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"

二、进入容器

1. exec命令
# 进入容器中的命令行,最常用的命令,使用组合键 Ctrl+P+Q 即可退出容器
$ docker exec -it CONTAINER_ID /bin/bash
2. attach命令

使用 attach 命令可能发生窗口堵塞

$ docker attach CONTAINER_ID
3. ssh连接

容器中安装 SSH Server,此方法合本就需要 SSH 环境的容器

4. 使用nsenter

使用nsenter1此方法需安装util-linux

# 使用以下命令可以获取到容器进程为 CONTAINER_PID
$ docker inspect -f {{.State.Pid}} CONTAINER_ID

# 使用 nsenter 进入容器
$ nsenter --target CONTAINER_PID --mount --uts --ipc --net --pid

三、管理容器

1. 运行容器
# 运行已经停止的容器
$ docker start CONTAINER_ID

# 重启正在运行的容器
$ docker restart CONTAINER_ID
2. 停止容器
# 停止正在运行的容器
$ docker stop CONTAINER_ID

# 强制停止容器
$ docker kill CONTAINER_ID
3. 移除容器
# 移除某一容器
$ docker rm CONTAINER_ID

# 移除所有容器
$ docker rm -f $(docker ps -a -q)
4. 重命名容器
# 重命名为 CONTAINER_NAME
$ docker rename CONTAINER_ID CONTAINER_NAME
5. 容器日志
# 查看最后 200 行日志
$ docker logs -f --tail 200 CONTAINER_ID

四、网络配置

1. 预定类型

网络类型 bridge(与宿主机桥接,自动分配ip)[默认], host(附属于主机,同宿主机ip), none(无指定网络,不分配ip)

$ docker run -it --net host ubuntu /bin/bash
2. 自定义类型
# 使用地址段192.168.0.0/16
$ docker network create --subnet=192.168.0.0/16 mynet

# 使用固定ip
$ docker run -it --net mynet --ip 192.168.0.10 ubuntu /bin/bash

五、容器数据—volume操作

1. 寻找真实宿主目录
# 运行一个 nginx 镜像,并挂载卷 /usr/share/nginx/html
$ docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html nginx

# 检查容器信息
$ docker inspect nginx
# 所列的信息中 "Mounts" : [ { "Source" : 宿主机挂载位置 } ]
# Linux 下改位置为真实位置
# Windows 和 Mac 下该位置处于虚拟机上,需要登陆虚拟机在查看该位置
$ ls 
2. 挂载宿主目录
# 将宿主机的目录挂载到容器
$ docker run -p 80:80 -d -v HOST_DIR:CONTTAINER_DIR nginx
3. 共享数据容器
# 创建数据存储的独立容器
$ docker create -v HOST_DIR:CONTAINER_DIR --name DATA_CONTAINER_NAME

# 将创建的数据容器挂载到其它容器中,实现多容器数据共享
$ docker run --volumes-from DATA_CONTAINER_NAME IMAGE_NAME

Ⅲ.镜像仓库

一、简单操作

# 登陆官方仓库 Docker Hub,输入登陆名和密码
$ docker login

# 上传镜像
$ docker push YOUR_IMAGE

二、搭建私有仓库

1. 搭建http镜像仓库
# 使用 /opt/data/registry 目录存放镜像
# 使用证书(生成后保存在 /home/certs 目录下,Docker_crt 和 Docker_key)
$ docker run -d -p 5000:5000 --restart=always --name registry \
> -v /opt/data/registry:/var/lib/registry \
> -v /home/certs:/certs \
> -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/Docker_crt \
> -e REGISTRY_HTTP_TLS_KEY=/certs/Docker_key \
> registry:2
2. 搭建https镜像仓库[×]
3. 查询镜像列表
# 登陆私有仓库
$ docker login REPOSITORY_URL
$ docker push IMAGE_ID

打开浏览器访问 “http://REPOSITORY_URL/v2/_catalog”

三、设置客户端连接方式

docker 客户端默认采用 https 方式连接,直接使用客户端连接http镜像仓库推送镜像时会报错

"server gave HTTP response to HTTPS client"
1. windows 下客户端设置

登陆docker宿主机2,在 /etc/docker/ 下创建 daemon.json ,并添加

{"insecure-registries":["192.168.1.10:5000"] } 

其中 192.168.1.10:5000 为私建镜像仓库地址,然后重启 docker .

2. linux 下客户端设置

① 修改docker的配置文件(各种版本修改方法,视版本和目录情况而定)

$ vi /etc/sysconfig/docker

# 添加下面一行
DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000" 

② 在 /etc/docker/ 下创建 daemon.json ,并添加

{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "insecure-registries": ["http://registry.yuan.com:5000"]
}

其中 registry.yuan.com:5000 为私建镜像仓库地址
然后重启docker后台进程,

$ sudo service docker restart

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
3. 证书

创建仓库时需要创建证书,否则使用一些命令时会报错.

$ docker search 192.16831.10:5000/veoer/account
"If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.1.10:5000` to the daemon's arguments. 
In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/192.168.1.10:5000/ca.crt"

Ⅳ.编排[×]

附Ⅰ.Xshell登陆 docker 虚拟机

在 windows 或 mac 下安装 docker 时使用 docker toolbox 工具,安装完成后使用 Xshell 连接docker虚拟机

① 查看主机映射端口:virsual box 中虚拟机网络设置 ,网卡1地址转换,网卡2仅主机网络,查看网卡1地址转换高级设置端口转发

名称 协议 主机IP 主机端口 子系统IP 子系统端口
ssh TCP 127.0.0.1 49648 22

② 查看到虚拟机映射到主机的端口为 49648,则Xshell登陆时连接为 127.0.0.1:49648

用户名 密码 说明
docker tcuser Xshell登陆验证
root 无法登陆,通过docker用户sudo -i进行切换

附Ⅱ.使用docker toolbox 可能遇到的问题

  1. 创建容器后无法进入容器

并报错 the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' ,解决办法如下:

① 在命令前面加上 winpty

$ winpty docker exec -it ubuntu /bin/bash

② 进入虚拟机执行命令

使用命令 docker-machine ssh default 即可进入虚拟机


  1. nsenter在util-linux中,使用nsenter须安装util-linux: yum install util-linux ↩︎

  2. 非linux环境docker安装在虚拟机上,登陆虚拟机可以直接从virsual box等软件登陆,也可通过Xshell登陆虚拟机具体见: 附Ⅰ.Xshell登陆docker虚拟机 ↩︎

你可能感兴趣的:(docker)