Docker教程二:常用命令及配置文件

前言: 这篇开始是干货,都是各种命令。上篇已经介绍了docker最基本的实现,对其内部配置以及如何命令操作一概不知,这篇就是来说这个的。

一、基础命令

首先是docker的命令及含义

    attach    进入一个容器    build     从Dockerfile编译    commit    提交容器    cp       从容器内复制文件到指定的路径上    create    创建容器    diff      可以列出容器内发生变化的文件和目录    events    从服务器拉取个人动态,可选择时间区间    exec      进入容器    export    将指定的容器保存成 tar 归档文件, docker import 的逆操作。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚    history    查看指定镜像的创建历史    images    查看镜像列表    import    从归档文件(支持远程文件)创建一个镜像, export 的逆操作,可为导入镜像打上标签。导出后导入(exported-imported))的容器会丢失所有的提交历史,无法回滚    info      显示系统信息    inspect    查看容器底层信息    kill      结束一个正在运行的容器    load      从 tar 镜像归档中载入镜像, docker save 的逆操作。保存后再加载(saved-loaded)的镜像不会丢失提交历史和层,可以回滚    login     登录Docker HUB    logout    退出Docker HUB    logs      打印出容器的标准输出    port      映射NAT的端口    pause     暂停容器    ps       列出容器    pull      下载一个镜像    push      将镜像推送至远程仓库,默认为 Docker Hub    restart    重启容器    rm       删除容器    rmi      删除镜像    run      运行一个新容器    save      保存镜像    search    搜索镜像    start     启动容器    stop      停止容器    tag      镜像改名    top      查看容器进程    unpause    恢复暂停的容器    version    查看版本    wait      阻塞对指定容器的其它调用方法,直到容器停止后退出阻塞

下面是docker run的命令及含义

        -i    # 允许在容器进行交互        -t    # 分配伪tty终端        -d    # 在后台运行容器        -P    # 标示通知Docker所需的网络端口映射从主机映射到我们的容器内        -h    # 指定容器的hostname        -e    # 设置容器的环境变量        -a    # stdin 指定标准输入输出内容类型,可选 STDIN/STDOUT / STDERR 三项        -w    # 指定工作目录        -u    # 指定用户名id        -m    # 指定内存        --env-file=[]              从指定文件读入环境变量        --restart=always        当容器推出时,自动重启容器        --restart=on-failure:5    当容器推出代码为非0时,docker会尝试自动重启该容器,最多重启5次        --name                     指定容器名,容器名在整个docker环境中必须唯一        --dns                      指定dns        --cpuset=""                绑定容器到指定CPU运行        --net="bridge"             指定容器运行的网络模式

下面从日常的使用简单说明下常用的命令:

1、首先要部署肯定要基于镜像,就跟电脑里装系统才能使用差不多意思。

那么就先搜索镜像,看有没有相关的镜像,用到了docker search

1463465023394

第一列:镜像名(/前面的是仓库名)  第二列:描述  第三列:星级排名(也就是使用数)    第四列:是否为官方    第五列:自动化

2、查到了相关的镜像,那么就来下载镜像。用到了docker pull

1463465036415

3、下载之后查看是否成功,用到了docker images

1463465050052

成功下载到本机

4、有了镜像,那么就可以开始部署容器了。用到了docker run

1463465067888

可以看到已经成功运行容器,并进入容器(其实还有种方式是先创建,然后再启动)

5、启动之后就看看下运行状态,用到了docker ps(得另开终端)

1463465082277

可以看到容器正在运行,各种信息

6、现在想关闭容器,用到了docker stop

1463465093383

7、上面可以看到容器不在运行了,那么现在想删除这个容器,用到了docker rm

1463465107285

可以用docker ps -a 列出所有容器,然后指定容器ip删除

二、配置文件及目录

由于docker每个版本的配置文件都相差很大,这里以我当时的配置为例:(所有配置文件暂时都保持默认)

服务配置文件:/usr/lib/systemd/system/docker.service

Description=Docker Application Container EngineDocumentation=http://docs.docker.comAfter=network.targetWants=docker-storage-setup.service[Service]Type=notifyEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashExecStart=/usr/bin/docker daemon $OPTIONS \          $DOCKER_STORAGE_OPTIONS \          $DOCKER_NETWORK_OPTIONS \          $ADD_REGISTRY \          $BLOCK_REGISTRY \          $INSECURE_REGISTRY     # 之前的子配置没有这么规范,现在都是划分的很细,比如网络、存储、仓库等LimitNOFILE=1048576LimitNPROC=1048576LimitCORE=infinityMountFlags=slaveTimeoutStartSec=1min[Install]WantedBy=multi-user.target

以第一个环境变量配置文件为例(其余默认为空):/etc/sysconfig/docker

OPTIONS='--selinux-enabled'                         # 开启selinuxDOCKER_CERT_PATH=/etc/docker                        # 证书目录INSECURE_REGISTRY='--insecure-registry 10.20.161.77:5000'     # 添加安全仓库,这项比较重要,后面会有提及

配置文件中经常需要关注的就是docker的启动参数,比如如何修改docker默认的内部ip(之后网络部分会详细说明)

那么就在/etc/sysconfig/docker-network添加参数--bip=172.18.42.1/16 即可。

默认装好之后,学习测试,不需要修改,之后会有说明。

两个很重要的目录:

image存储目录:/var/lib/docker/

container存储目录:/var/lib/docker/containers/


答疑:

如何进入容器?这是目前最大的疑惑了?

刚刚接触docker难免会有这样的疑问,虽然新建容器的时候已经进入容器了,但是一旦退出来,如何才能再与容器来交互?

容器启动有-t 和-d 两者的区别就是一个是tty登录启动(Ctrl+p+q 后台运行),一个是后台启动。那么就涉及到一个进入容器的问题,也可以在容器里安装ssh,但是不推荐。

两种方式进入容器:

1、docker attach

2、PID=$(docker inspect --format {{.State.Pid}} )

nsenter --target $PID --mount --uts --ipc --net --pid

在容器里,可以操作shell解析器。如果要想以自动化的方式来运行特殊的脚本或程序,把它作为参数添加到nsenter中。除了它使用容器代替了简单目录来工作外,它的工作方式有点像chroot。

如何与容器进行数据传输?

知道了如何进入容器,那么有时肯定会想向容器里传个文件?首先想到scp,那么肯定不行,都没有ssh服务。而且容器是微服务的概念,一般只会运行一个服务。所以要想传文件,肯定要别的办法。幸好docker提供了这样的命令,方便操作。

1、docker cp 容器id:容器路径 本地路径

2、启动容器的时候使用-v参数来映射目录,那么就很方便的实现了数据传输

下面再来体验下如何创建容器!

(部署一个tomcat容器)

# docker pull tomcat:latest                # 下载镜像# docker run -dp 12345:8080 tomcat:latest        # 创建容器并映射端口# curl -I http://localhost:12345            # 验证结果(部署一个nginx容器)

Nginx:

# docker pull nginx:latest                   # 下载镜像# mkdir -p /some/content                    # 创建映射目录(待会用到)# echo "Index Page" > /some/content/index.html       # 创建主页(待会用到)# docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -dp 12348:80 nginx   # 创建容器并映射端口# curl http://localhost:12348Index Page

关键字:docker

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部