大家好,又见面了,我是你们的朋友全栈君。 docker 常用命令合集
Web 应用的自动化打包和发布。 自动化测试和持续集成、发布。 在服务型环境中部署和调整数据库或其他的后台应用。 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。 (1)、快速,一致地交付您的应用程序 Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。 容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案: 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。 (2)、响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。 Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。 (3)、在同一硬件上运行更多工作负载 Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
yum -y install yum-utils device-mapper-persistent-data lvm2
//yum-utils 提供了yum-config-manager
//device mapper 存储驱动程序需要device-mapper-persistent-data和lvm2
//device mapper 是Linux2.6内核中支持逻辑卷管理的通用设备映射机制。
//它为实现用于存储资源管理的块设备驱动提供了一个而高度模块化的内核架构
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker.service
systemctl enable docker.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
进入官网》》搜索镜像加速》》选择centos版的
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1i3tpy0i.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker
docker version
docker search nginx
docker pull nginx
docker pull redis
docker pull -a redis
docker pull bitnami/redis
docker images //查看下载镜像信息
[root@localhost opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 8 days ago 133MB
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
//含中间映像层
docker images -a
//只显示镜像ID
docker images -q
//含中间映像层
docker images -qa
//显示镜像摘要信息(DIGEST列)
docker images --digests
//显示镜像完整信息
docker images --no-trunc
docker inspect 7e4d58f0e5f3
docker tag nginx:latest nginx:web
[root@localhost opt]# docker tag nginx:latest nginx:web
[root@localhost opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 7e4d58f0e5f3 8 days ago 133MB
nginx web 7e4d58f0e5f3 8 days ago 133MB
//查看镜像Nginx信息
[root@localhost opt]# docker images | grep nginx
nginx latest 7e4d58f0e5f3 8 days ago 133MB
nginx web 7e4d58f0e5f3 8 days ago 133MB
docker rmi nginx:web (如果只有一个别名,那么这个就是删除docker。如果是多个标签,那么就是只是删除一个标签)
docker rmi docker——id 注:删除docker如果有其他别名需要删除只剩一个,才能删除docker
在删除容器之前需要先停止容器
docker rmi redis
docker rmi -f redis
docker rmi -f redis tomcat nginx
docker rmi -f $(docker images -q)
docker save -o 文件名 镜像id或者镜像别名
[root@localhost ~] docker save -o /opt/nginx 7e4d58f0e5f3
[root@localhost opt] docker save -o nginx1 nginx:latest
[root@localhost ~]cd /opt
[root@localhost opt] ll
总用量 133636
drwx--x--x. 4 root root 28 9月 17 15:43 containerd
-rw-------. 1 root root 136841216 9月 19 19:04 nginx
drwxr-xr-x. 2 root root 6 10月 31 2018 rh
docker load –input 导出文件名
docker load < 导出文件名
[root@localhost opt] docker load --input nginx
Loaded image ID: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
[root@localhost opt] docker load < nginx
Loaded image ID: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
[root@localhost opt] docker load --input nginx1
Loaded image: nginx:latest
docker create -it nginx:latest /bin/bash
[root@localhost opt] docker create -it nginx:latest /bin/bash
59c4c2f2b6a00bceb196f1bbcfe02fc5a2e16edc66feb12310c9474bf939d833
语法
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 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
docker ps -a
[root@localhost opt] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59c4c2f2b6a0 nginx:latest "/docker-entrypoint.…" 2 minutes ago Created pedantic_bose
//显示最近创建容器
docker ps -l
//显示最近创建的3个容器
docker ps -n 3
//不截断输出
docker ps --no-trunc
//获取镜像redis的元信息
docker inspect redis
//获取正在运行的容器redis的 IP
docker inspect --format='{
{range .NetworkSettings.Networks}}{
{.IPAddress}}{
{end}}' redis
//查看正在运行的容器
docker ps
//查看正在运行的容器的ID
docker ps -q
//查看正在运行+历史运行过的容器
docker ps -a
//显示运行容器总文件大小
docker ps -s
docker start 59c4c2f2b6a0
查看镜像 up 状态
[root@localhost opt] docker start 59c4c2f2b6a0
59c4c2f2b6a0
[root@localhost opt] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59c4c2f2b6a0 nginx:latest "/docker-entrypoint.…" 3 minutes ago Up 9 seconds 80/tcp pedantic_bose
docker stop 容器ID
docker restart 容器ID
docker pull centos 7
docker create it centos 7 /bin/bash
docker start 8c6dd3246eb4
docker run nginx /usr/bin/bash -c ls
[root@localhost opt] docker exec -it 8c6dd3246eb4 /bin/bash
docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker exec -i -t mynginx /bin/bash
docker exec -it 9df70f9a0714 /bin/bash
exit 退出
docker export 8c6dd3246eb4 > nginx_c
8c6dd3246eb4:容器ID
Nginx_c :导出容器文件名
cat nginx_c | docker import - nginx:web
nginx_c:导出的容器文件名
nginx:web:新的容器名
[root@localhost opt] docker rm 8c6dd3246eb4
Error response from daemon: You cannot remove a running container 8c6dd3246eb42099dbf58e2730f348acc21b685a4f27c60185d9a427e1282f09. Stop the container before attempting removal or force remove
[root@localhost opt] docker stop 8c6dd3246eb4
8c6dd3246eb4
[root@localhost opt] docker rm 8c6dd3246eb4
8c6dd3246eb4
方法一:docker ps -a | awk '{print "docker rm $1"}' | bash
方法二:
[root@localhost opt]docker rm -f $(docker ps -aq)
395dab3d44df
2b52ff42681f
1627dc7213cd
960857ff1ba0
59c4c2f2b6a0
//强制杀死进程容器(处于运行状态才能杀死进程-docker start id)
docker kill id
docker rm -f redis
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
docker rm -l db
docker rm -v redis
vim none.sh
docker ps -a | grep "Exited" | awk '{print $1}'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1}'|xargs docker rm
docker images|grep none|awk '{print $3}'|xargs docker rmi
//top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
//列出redis容器中运行进程
docker top redis(容器ID)
//查看所有运行容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
//查看redis容器日志,默认参数
docker logs rabbitmq
//查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
//查看容器redis从2019年05月21日后的最新10条日志。
docker logs --since="2019-05-21" --tail=10 redis
实例
暂停数据库容器db01提供服务。
docker pause db01
恢复数据库容器db01提供服务。
docker unpause db01
docker create -it jasonlix/docker-cobbler /bin/bash
docker commit -m "new" -a "daoke" c83aee844ae0 daoke:test
docker images | grep daoke
将文件debian-7.0-x86-minimal.tar.gz拖至opt目录中
[root@localhost opt] cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new
sha256:6683b936f5574560c919751a6622d4131bb7fb4d88f7a9614c55fb7f554ef2c0
[root@localhost opt] docker images | grep new
daoke new 6683b936f557 13 seconds ago 215MB
mkdir apache
cd apache
vim Dockerfile
#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The project <cloud-ops@centos.org>
#镜像操作指令安装Apache软件
RUN yum -y update
RUN yum -y install httpd
#开启80端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
echo "web test" > index.html
docker build -t httpd:centos1 . (注意别忘了末尾有“.”)
docker run -d -p 1216:80 httpd:centos1
docker start 4fbc428fac3a (开启容器)
[root@localhost apache]docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fbc428fac3a httpd:centos1 "/run.sh" 8 seconds ago Up 7 seconds 0.0.0.0:1216->80/tcp affectionate_lovelace
a4f43a12352e registry "/entrypoint.sh /etc…" 2 hours ago Exited (2) 40 minutes ago goofy_bose
ba786a224305 registry "/entrypoint.sh /bin…" 2 hours ago Exited (127) 2 hours ago zen_hamilton
(1)数据管理操作
(2)两种管理方式
(3)创建数据卷
docker run -d -v /data1 -v /data2 --name web httpd:centos
docker run -d -v /var/www:/data1 --name web-1 httpd:centos
docker pull centos
//宿主机目录/var/www挂载容器中的/data1
docker run -v /var/www:/data1 --name web1 -it centos /bin/bash
cd /data1
touch test123
//返回宿主机进行查看
ls /var/www
//数据卷容器
docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash ##(加/bin/bash 就是可以直接进入容器)
docker run -it -volumes-from web100 --name db1 centos /bin/bash
注释:容器web100 和容器db1 所挂载的目录data1和data2 数据是同步运行的。
docker run -d -p httpd:centos
docker run -d -p 49280:80 httpd:centos
docker ps -a
docker pull registry
[root@localhost /]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
cbdbe7a5bc2a: Pulling fs layer
47112e65547d: Pulling fs layer
46bcb632e506: Pulling fs layer
c1cc712bcecd: Pulling fs layer
3db6272dcbfa: Pulling fs layer
latest: Pulling from library/registry
cbdbe7a5bc2a: Pulling fs layer
47112e65547d: Pulling fs layer
46bcb632e506: Pulling fs layer
c1cc712bcecd: Pulling fs layer
3db6272dcbfa: Pulling fs layer
open /var/lib/docker/tmp/GetImageBlob684407966: no space left on device
---------------------------------------------------
vim /etc/docker/daemon.json
{
"insecure-registries":["192.168.75.200:5000"], //添加
"registry-mirrors": ["https://1i3tpy0i.mirror.aliyuncs.com"]
}
~
systemctl restart docker.service
docker create -it registry /bin/bash #新建容器
docker ps -a
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba786a224305 registry "/entrypoint.sh /bin…" 44 minutes ago Exited (127) 9 minutes ago zen_hamilton
docker start 231d40e811cd ##开启(不是up是正确的)
##宿主机的/data/registry自动创建挂载容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
docker pull httpd
##更改标记为192.168.75.200:5000/httpd
docker tag httpd:latest 192.168.75.200:5000/httpd (标记IP地址与私有仓库的地址和端口相一致)
docker push 192.168.75.200:5000/httpd ##上传镜像
##获取私有仓库列表
curl -XGET http://192.168.75.200:500/v2/_catalog
docker pull 192.168.75.200:500/httpd ##测试私有仓库下载镜像
docker run -d -P httpd:centos ##随机分配外部的映射端口
docker run -d -p 43992:80 httpd:centos ##指定端口映射
docker ps -a ##查看
(1)端口映射进行容器互联
docker run -itd -P --name web1 ecntos /bin/bash
docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
端口映射并不是唯一把 docker 连接到另一个容器的方法。
docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。
(2)网络设置进行容器互联
新建网络
下面先创建一个新的 Docker 网络。
$ docker network create -d bridge test-net
参数说明:
-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。
连接容器
运行一个容器并连接到新建的 test-net 网络:
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
打开新的终端,再运行一个容器并加入到 test-net 网络:
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
apt-get update
apt install iputils-ping
下面通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。
如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193062.html原文链接:https://javaforall.cn