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
第一列:镜像名(/前面的是仓库名) 第二列:描述 第三列:星级排名(也就是使用数) 第四列:是否为官方 第五列:自动化
2、查到了相关的镜像,那么就来下载镜像。用到了docker pull
3、下载之后查看是否成功,用到了docker images
成功下载到本机
4、有了镜像,那么就可以开始部署容器了。用到了docker run
可以看到已经成功运行容器,并进入容器(其实还有种方式是先创建,然后再启动)
5、启动之后就看看下运行状态,用到了docker ps(得另开终端)
可以看到容器正在运行,各种信息
6、现在想关闭容器,用到了docker stop
7、上面可以看到容器不在运行了,那么现在想删除这个容器,用到了docker rm
可以用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
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!