centOS7 关于Docker的命令(初级篇)
- 用户权限切换
- 安装docker
- docker镜像命令
- docker容器命令
-
- docker run :创建一个新的容器并运行一个命令
- 退出容器交互
- docker ps : 列出容器
- docker start :启动一个或多个已经被停止的容器
- docker restart :重启容器
- docker stop :停止一个运行中的容器
- docker kill :杀掉一个运行中的容器(强制关闭容器)。
- docker rm :删除一个或多个容器。
- docker attach :连接到正在运行中的容器。
- docker exec :在运行的容器中执行命令
- docker cp :用于容器与主机之间的数据拷贝。
- docker inspect : 获取容器/镜像的元数据。
- DockerFile解析
用户权限切换
当前普通用户登录,想要切换为root用户,需要输入命令
su
想从root用户切换到普通用户,只需要输入
su jinjing523
安装docker
1.卸载旧的版本docker或docker-engine
[root@localhost ~]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.使用存储库安装, 由于官方存储库下载的比较慢,就使用清华大学镜像的存储库或者使用阿里云镜像的存储库
2-1.安装存储库所需要的依赖包
[root@localhost ~]# yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
2-2.使用清华大学镜像存储库或者阿里云镜像存储库
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
或者用阿里云镜像存储库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3安装docker
[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io
4.启动docker,并查看docker的版本
[root@localhost ~]# systemctl start docker #启动docker
[root@localhost ~]# docker -v #查看docker版本
Docker version 18.09.7, build 2d0083d
[root@localhost ~]# docker info #查看docker详细信息
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.7
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.685GiB
Name: localhost
ID: IVDD:BQR4:ASMV:YC4O:HSAI:35B4:DC7J:66H4:WPIV:OA27:GJE7:QS2Y
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
5 新版的docker使用镜像加速器
[root@localhost ~]# vim /etc/docker/daemon.json #编辑镜像加速器
{
"registry-mirrors": ["https://yrxhlwl.mirror.aliyuncs.com"] # 个人阿里容器镜像服务地址
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker #配置后重启服务
docker镜像命令
docker search : 从Docker Hub查找镜像
docker search [OPTIONS] TERM
OPTIONS说明:
- automated :只列出 automated build类型的镜像;
- no-trunc :显示完整的镜像描述;
- -f <过滤条件>:列出收藏数不小于指定值的镜像。
从 Docker Hub 查找所有tomcat镜像,并且收藏数大于 30 的镜像
[root@localhost jinjia523]# docker search -f stars=30 tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 2927 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 86 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 55 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image
参数说明:
- NAME: 镜像仓库源的名称
- DESCRIPTION: 镜像的描述
- OFFICIAL: 是否 docker 官方发布
- stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
- AUTOMATED: 自动构建。
docker pull : 从镜像仓库中拉取或者更新指定镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
- -a :拉取所有 tagged 镜像
- –disable-content-trust :忽略镜像的校验,默认开启
从Docker Hub下载tomcat 镜像
[root@localhost jinjia523]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
b9a857cbf04d: Pull complete
d557ee20540b: Pull complete
3b9ca4f00c2e: Pull complete
667fd949ed93: Pull complete
661d3b55f657: Pull complete
511ef4338a0b: Pull complete
a56db448fefe: Pull complete
00612a99c7dc: Pull complete
326f9601c512: Pull complete
c547db74f1e1: Pull complete
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
docker images : 列出本地镜像。
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
-
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-
–digests :显示镜像的摘要信息;
-
-f :显示满足条件的镜像;
-
–format :指定返回值的模板文件;
-
–no-trunc :显示完整的镜像信息;
-
-q :只显示镜像ID。
查看本地镜像列表。
[root@localhost jinjia523]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 621ceef7494a 13 days ago 104MB
tomcat latest 040bdb29ab37 13 days ago 649MB
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
docker rmi : 删除本地一个或多少镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
- -f :强制删除;
- –no-prune :不移除该镜像的过程镜像,默认移除;
强制删除本地所有镜像
docker rmi -f $(docker images -qa)
docker history:查看指定镜像的创建历史。
docker history [OPTIONS] IMAGE
OPTIONS说明:
- -H :以可读的格式打印镜像大小和日期,默认为true;
- –no-trunc :显示完整的提交记录;
- -q :仅列出提交记录ID。
查看自己构造的mycentos历史记录
[root@localhost mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.3 0e7c8512a14f 8 minutes ago 291MB
redis latest 621ceef7494a 2 weeks ago 104MB
tomcat latest 040bdb29ab37 2 weeks ago 649MB
centos latest 300e315adb2f 7 weeks ago 209MB
[root@localhost mydocker]# docker history 0e7c8512a14f
IMAGE CREATED CREATED BY SIZE COMMENT
0e7c8512a14f 9 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
0315bf73ff81 9 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
18060388f695 9 minutes ago /bin/sh -c yum -y install net-tools 23.3MB
fb7821d7fb3c 11 minutes ago /bin/sh -c yum -y install vim 58.1MB
ac2a3994dc91 11 minutes ago /bin/sh -c #(nop) WORKDIR /tmp 0B
a7e1648d9197 11 minutes ago /bin/sh -c #(nop) ENV MYPATH=/tmp 0B
32947a1c04ee 11 minutes ago /bin/sh -c #(nop) MAINTAINER jinxin<jingxin… 0B
300e315adb2f 7 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 7 weeks ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB
docker容器命令
docker run :创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=“nginx-lb”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=“ritchie”: 设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]: 开放一个端口或一组端口;
- –volume , -v: 绑定一个卷
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /hoatData映射到容器的 /containerData(加上:rod代表容器containerData目录只有读权限,没有写权限)。
docker run -p 80:80 -v /hoatData:/containerData:ro -d nginx:latest
doc2容器共享doc1容器的的数据卷(yctc/tomcat是VOLUME自我封装的镜像)
docker run -it --name doc2 --volumes-from doc1 yctc/tomcat
退出容器交互
- exit 容器停止退出
- ctrl + P + Q 容器不停止退出(通过docker attach和docker exec再次进入)
docker ps : 列出容器
docker ps [OPTIONS]
OPTIONS说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- –format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- –no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
列出所有在运行的容器信息。
runoob@runoob:~$ docker ps
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql
列出最近创建的5个容器信息。
runoob@runoob:~$ docker ps -n 5
CONTAINER ID IMAGE COMMAND CREATED
09b93464c2f7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
b8573233d675 nginx:latest "/bin/bash" 2 days ago ...
b1a0703e41e7 nginx:latest "nginx -g 'daemon off" 2 days ago ...
f46fb1dec520 5c6e1090e771 "/bin/sh -c 'set -x \t" 2 days ago ...
a63b4a5597de 860c279d2fec "bash" 2 days ago ...
docker start :启动一个或多个已经被停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
启动已被停止的容器mycentOS
docker start mycentOS
docker restart :重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]
重启容器mycentOS
docker restart mycentOS
docker stop :停止一个运行中的容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
停止运行中的容器mycentOS
docker stop mycentOS
docker kill :杀掉一个运行中的容器(强制关闭容器)。
docker kill [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -s :向容器发送一个信号
杀掉运行中的容器mycentOS
runoob@runoob:~$ docker kill -s KILL mycentOS
mycentOS
docker rm :删除一个或多个容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -f :通过 SIGKILL 信号强制删除一个运行中的容器。
- -l :移除容器间的网络连接,而非容器本身。
- -v :删除与容器关联的卷。
删除所有已经停止的容器:
docker rm $(docker ps -a -q)
docker attach :连接到正在运行中的容器。
建议使用docker exec ,docker attach命令会出现卡死现象
docker attach [OPTIONS] CONTAINER
docker exec :在运行的容器中执行命令
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
docker cp :用于容器与主机之间的数据拷贝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS说明:
- -L :保持源目标中的链接
docker inspect : 获取容器/镜像的元数据。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- –type :为指定类型返回JSON。
获取镜像tomcat的元信息。
[root@localhost jinjia523]# docker inspect f7ddfece26dd
[
{
"Id": "f7ddfece26dd46e62b97839ac71925d83ba4beb1ba519bd81b45977909dced8a",
"Created": "2021-01-26T15:19:10.478625626Z",
"Path": "catalina.sh",
"Args": [
"run"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 5174,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-01-26T15:19:11.191383847Z",
"FinishedAt": "0001-01-01T00:00:00Z"
}
......
docker commit
DockerFile解析
DockerFile关键字解释
FROM:基础镜像,定制的镜像都是基于 FROM 的镜像(scratch所有镜像的父镜像,类似于java中的Object)
在这里插入代码片
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
EXPOSE:当前容器对外暴露的接口
WORKDIR:指定在创建容器后,终端默认登录进来工作目录,一个落脚点
ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量
ADD:从上下文目录中复制文件或者目录到容器里指定路径且ADD命令会自动处理url和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件、目录复制到新的一层的镜像内的<目标路径>位置
VOLUME :容器数据卷,用于数据保存和持久化工作(docker run -v /hoatData:/containerData:ro -d nginx作用相同)
CMD:指定一个容器启动时要运行的命令。Dockerfile 中可以存在多个 CMD 指令,仅最后一个生效且CMD会被docker run之后的参数替换
ENTRYPOINT :类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发
DockerFile 举例
VOLUME建立容器数据卷
[root@localhost jinjia523]# mkdir mydocker
[root@localhost jinjia523]# cd mydocker
[root@localhost mydocker]# pwd
/home/jinjia523/mydocker
[root@localhost mydocker]# vim Dockerfile
#volume test
from tomcat
volume ["/dataVolumeContainer1","/dataVolumeContainer2"]
[root@localhost mydocker]# docker build -f Dockerfile -t yctc/tomcat .
Sending build context to Docker daemon 2.048kB
Step 1/3 : from tomcat
---> 040bdb29ab37
Step 2/3 : volume ["/dataVolumeContainer1","/dataVolumeContainer2"]
---> [Warning] IPv4 forwarding is disabled. Networking will not work.
---> Running in 11bc537c8347
Removing intermediate container 11bc537c8347
---> 4d02f38439c1
Removing intermediate container baeeb5db3b1f
---> 647d4e9684c4
Successfully built 647d4e9684c4
Successfully tagged yctc/tomcat:latest
[root@localhost mydocker]#
相关关键字的运用
FROM centos #来源本地latest的centos
MAINTAINER jinxin<[email protected]> #设置作者信息
ENV MYPATH /tmp #设置环境变量 MYPATH=/tmp
WORKDIR $MYPATH #设置运行时工作目录WORKDIR
RUN yum -y install vim #安装vim命令
RUN yum -y install net-tools #安装网络工具
EXPOSE 80 #设置对外端口80
CMD /bin/cash #设置启动时运行的命令