docker基础操作命令-----容器篇

文章目录

前言

什么是Docker容器?

容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

在这里插入图片描述

Docker 借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker 将这个模 型运用到自己的设计中,唯一不同的是:集装箱运输货物,而 Docker 运输软件。和集装箱一样,Docker 在执行上述操作时,并不关心容器中到底装了什么,它不管是 web 服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将 内容“装载”进去。

一 . 容器创建与删除

1.1 查看镜像

[root@docker2 opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED         SIZE
nginx               latest              7e4d58f0e5f3        7 days ago         133MB
[root@docker2 opt]# docker create -it nginx:latest /bin/bash
d9850fa13e2e1422fc9e0ce690d30f6977852f8d6bb858d51e151ebe09d3e891

1.2 查看容器

[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d9850fa13e2e        nginx:latest        "/docker-entrypoint.…"   14 seconds ago      Created                                 heuristic_mccarthy

1.3 启动容器

[root@docker2 opt]# docker start d9850fa13e2e
d9850fa13e2e

1.4 查看状态,变成 up 运行状态

[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d9850fa13e2e        nginx:latest        "/docker-entrypoint.…"   2 minutes ago       Up 4 seconds        80/tcp              heuristic_mccarthy

1.5 停止容器

[root@docker2 opt]#  docker stop f04aeae9e8d1

1.6 下载centos7 镜像

先搜索资源

[root@docker2 opt]# docker search centos7
NAME                               DESCRIPTION
ansible/centos7-ansible            Ansible on Centos7
flyceek/centos7-jdk                centos7-jdk
ryanj/centos7-s2i-nodejs           STOP RUNNING YOUR APP BUILDS AS ROOT
paigeeworld/centos7                Centos7 with apache, iperf3, nmap, s

在 根据镜像名称进行下载

[root@docker2 opt]# docker pull paigeeworld/centos7
Using default tag: latest
latest: Pulling from paigeeworld/centos7
Image docker.io/paigeeworld/centos7:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
a3ed95caeb02: Pull complete

查看镜像

[root@docker2 opt]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED           SIZE
nginx                 latest              7e4d58f0e5f3        7 days ago          133MB
paigeeworld/centos7   latest              4cbe7aa905e7        6 years ago         382MB

1.7 创建 centos7 的容器

[root@docker2 opt]#  docker create -it paigeeworld/centos7 /bin/bash
f04aeae9e8d172df5c1efcc5344516f31b4eabd2bc7b8b4ca3fb34535ec86b91
查看容器状态
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              2 minutes ago       Created                                 distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   11 minutes ago      Up 9 minutes        80/tcp              heuristic_mccarthy

开启容器

[root@docker2 opt]#  docker start f04aeae9e8d1
f04aeae9e8d1
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              3 minutes ago       Up 3 seconds                            distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   12 minutes ago      Up 10 minutes       80/tcp              heuristic_mccarthy

停止容器

[root@docker2 opt]#  docker stop f04aeae9e8d1
f04aeae9e8d1
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                       PORTS               NAMES
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              4 minutes ago       Exited (137) 3 seconds ago                       distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   13 minutes ago      Up 11 minutes                80/tcp              heuristic_mccarthy

1.8 查看centos7镜像的 根目录下 有哪些文件

[root@docker2 opt]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

相当于之前的docker run 命令 执行了 又创建了一个centos7 的容器,然后运行它,并查看了其根目录,然后又关闭了它 的操作

[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS                          PORTS               NAMES
bb475fdf03ed        paigeeworld/centos7   "/usr/bin/bash -c ls…"   About a minute ago   Exited (0) About a minute ago                       determined_borg
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              8 minutes ago        Exited (137) 3 minutes ago                          distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   16 minutes ago       Up 14 minutes                   80/tcp              heuristic_mccarthy

在一台没有centos7镜像的 设备上操作

docker run 命令 执行了 先自动下载镜像文件, 又创建了一个centos7 的容器,然后运行它,并查看了其根目录,然后又关闭了它 的操作

[root@SERVER 10 opt]# docker run paigeeworld/centos7 /usr/bin/bash -c ls /
Unable to find image 'paigeeworld/centos7:latest' locally
latest: Pulling from paigeeworld/centos7
Image docker.io/paigeeworld/centos7:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
a3ed95caeb02: Pull complete
7235103339cf: Pull complete
c962e85f182c: Pull complete
e945c72281a4: Pull complete
bd558d66c6e0: Pull complete
b6d31d07a319: Pull complete
Digest: sha256:356b32d72680f0b9e0489af16961b2c3de74e18cbd391ffcf5ab085997fedf2b
Status: Downloaded newer image for paigeeworld/centos7:latest
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@SERVER 10 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS               NAMES
2c35c9b8be3b        paigeeworld/centos7   "/usr/bin/bash -c ls…"   17 seconds ago      Exited (0) 17 seconds ago                       dreamy_panini

1.9 进入容器查看

格式

docker exec -it   ID 号  /bin/bash
(必须先运行容器,或容器已处于运行状态)
[root@docker2 opt]# docker start f04aeae9e8d1
f04aeae9e8d1
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                          PORTS               NAMES
bb475fdf03ed        paigeeworld/centos7   "/usr/bin/bash -c ls…"   24 minutes ago      Exited (0) About a minute ago                       determined_borg
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              30 minutes ago      Up 2 seconds                                        distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   39 minutes ago      Up 37 minutes                   80/tcp              heuristic_mccarthy
进入容器
[root@docker2 opt]# docker exec -it f04aeae9e8d1  /bin/bash
bash-4.2# ls
bin  boot  dev	etc  home  lib	lib64  lost+found  media  mnt  opt  proc  root	run  sbin  srv	sys  tmp  usr  var
bash-4.2#

容器的退出

bash-4.2# exit
exit
[root@docker2 opt]# docker stop f04aeae9e8d1
f04aeae9e8d1
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                        PORTS               NAMES
bb475fdf03ed        paigeeworld/centos7   "/usr/bin/bash -c ls…"   26minutes ago      Exited (0) 4 minutes ago                          determined_borg
f04aeae9e8d1        paigeeworld/centos7   "/bin/bash"              33 minutes ago      Exited (137) 15 seconds ago                       distracted_ptolemy
d9850fa13e2e        nginx:latest          "/docker-entrypoint.…"   42minutes ago      Up 40 minutes                 80/tcp              heuristic_mccarthy

让容器持续在后台运行

通过设置死循环,让容器一直运行,-d 守护进程
[root@docker2 opt]# docker run -d paigeeworld/centos7 /bin/bash -c “while true;do echo hello;done”
c06add1ec27df716c02929b5edd893c3690247c1b0de1ac875598fffd4d78757
会发现容器一直处于运行状态
[root@docker2 opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c06add1ec27d paigeeworld/centos7 “/bin/bash -c 'while…” 45 seconds ago Up 44 seconds jolly_chatterjee
9cae901fe6ed paigeeworld/centos7 “/bin/bash -c 'while…” 12 minutes ago Exited (1) 12 minutes ago fervent_feistel
bb475fdf03ed paigeeworld/centos7 “/usr/bin/bash -c ls…” 41 minutes ago Exited (0) 19 minutes ago determined_borg
f04aeae9e8d1 paigeeworld/centos7 “/bin/bash” 48 minutes ago Exited (137) 15 minutes ago distracted_ptolemy
d9850fa13e2e nginx:latest “/docker-entrypoint.…” 57 minutes ago Up 55 minutes 80/tcp heuristic_mccarthy

停止运行容器

[root@docker2 opt]# docker stop c06add1ec27d
c06add1ec27d
[root@docker2 opt]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                        PORTS               NAMES
c06add1ec27d        paigeeworld/centos7   "/bin/bash -c 'while…"   3 minutes ago       Exited (137) 10 seconds ago                       joll

二. 容器的导出 和 导入

2.1 导出容器

[root@docker2 opt]# ls
containerd  nginx  rh
[root@docker2 opt]# docker export d9850fa13e2e > nginx_c
[root@docker2 opt]# ls
containerd  nginx  nginx_c  rh
[root@docker2 opt]# scp nginx_c root@192.168.100.10:/opt
root@192.168.100.10's password:
nginx_c                              100%  129MB 130.9MB/s   00:00
[root@docker2 opt]#

2.2 在另一台服务器导入容器

先根据模板生成新镜像

[root@SERVER 10 opt]# cat nginx_c | docker import - nginx:web
sha256:b2732e94c331a809dbdac585bb8df86ec298e35a99db1f29200cdbc8d3c4d205
[root@SERVER 10 opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED         SIZE
nginx               web                 b2732e94c331        5 seconds ago       131MB
[root@SERVER 10 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS              PORTS               NAMES

根据新镜像加载到容器

[root@SERVER 10 opt]# docker create -it nginx:web /bin/bash
95ab1d44b0c46b2f3a4ac4436b1b0236a5c6b67907fa87e78ea442907b95634e
[root@SERVER 10 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS              PORTS               NAMES
95ab1d44b0c4        nginx:web           "/bin/bash"         10 secondsago      Created                                 practical_lichterman
[root@SERVER 10 opt]# docker start 95ab1d44b0c4
95ab1d44b0c4
[root@SERVER 10 opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
95ab1d44b0c4        nginx:web           "/bin/bash"         4 minutes ago       Up 3 minutes                            practical_lichterman

三 .批量删除

首先 过滤 出容器列表

[root@docker2 opt]# docker ps -a | awk '{print "decker rm "$1}'
decker rm CONTAINER
decker rm c06add1ec27d
decker rm 9cae901fe6ed
decker rm bb475fdf03ed
decker rm f04aeae9e8d1
decker rm d9850fa13e2e

加入 删除指令,通过bash 环境执行

(在运行的容器不会删除,因为会报错提示,此命令用于批量删除未使用的容器)
[root@docker2 opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
c06add1ec27d
9cae901fe6ed
bb475fdf03ed
f04aeae9e8d1

docker container prune 效果一样

docker rm $(docker ps -a | awk ‘{print $1}’) 效果一样

docker rm -f $(docker ps -a | awk ‘{print $1}’) 强制删除所有容器

四. 数据卷与数据卷容器

在这里插入图片描述

4.1 数据卷,用的还是宿主机的空间 ,与宿主机共享空间

-v 数据卷 ,宿主机的路径:容器中的路径 建立了互相关联 创建了名为WEB1的容器使用了centos 镜像

[root@docker1 apache]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
[root@443744cf30b3 /]# ls
anaconda-post.log  data1  etc   lib    media  opt   root  sbin  sys  usr
bin                dev    home  lib64  mnt    proc  run   srv   tmp  var
[root@443744cf30b3 /]# cd data1
[root@443744cf30b3 data1]# touch abc.txt
[root@443744cf30b3 data1]#

文件数据共享

[root@docker1 apache]# cd /var/www
[root@docker1 www]# ls
[root@docker1 www]# ls
[root@docker1 www]# ls
[root@docker1 www]# ls
abc.txt

宿主机创建CDE,查看容器空间

[root@docker1 www]# touch cde.txt
[root@docker1 www]# ls
abc.txt  cde.txt

在容器中查看,同样存在

[root@443744cf30b3 data1]# ls
abc.txt  cde.txt
[root@443744cf30b3 data1]#

数据卷 只要在宿主机更改数据就可以达到更新 容器数据的目的


4.2 数据卷容器


//数据卷容器

有两个数据卷容器进行提供,利用了centos镜像

[root@docker2 ~]# docker run  --name web100 -v  /data1 -v  /data2   -it centos  /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
3c72a8ed6814: Pull complete
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:latest
[root@bc0dbbdd3408 /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin	sys  usr
[root@bc0dbbdd3408 /]# cd data1
[root@bc0dbbdd3408 data1]# echo "12345" > test1.txt
[root@bc0dbbdd3408 data1]# cd ../
[root@bc0dbbdd3408 /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin	sys  usr
[root@bc0dbbdd3408 /]# cd data2
[root@bc0dbbdd3408 data2]# echo "45678" > test2.txt
[root@bc0dbbdd3408 data2]# ls
test2.txt
[root@bc0dbbdd3408 data2]# cd ../data1
[root@bc0dbbdd3408 data1]# ls
test1.txt
[root@bc0dbbdd3408 data1]# exit
exit

新容器挂载数据卷容器web100,名字叫db1

[root@docker2 ~]# docker run   -it   --volumes-from   web100    --name   db1 centos   /bin/bash
[root@0b152c50576d /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin	sys  usr

查看目录,发现数据已达到了同步的目的

[root@0b152c50576d /]# cd data1
[root@0b152c50576d data1]# ls
test1.txt
[root@0b152c50576d data1]# cd data2
bash: cd: data2: No such file or directory
[root@0b152c50576d data1]# cd data2
bash: cd: data2: No such file or directory
[root@0b152c50576d data1]# cd ../
[root@0b152c50576d /]# cd data2
[root@0b152c50576d data2]# ls
test2.txt

数据卷容器 用在WEB群集数据更新,只要更新一个站点就好

五. 容器互联

创建并运行容器取名web1,端口号自动映射

[root@docker2 apache]# docker run -itd -P --name web11 centos:7 /bin/bash
075e9cdd940e8a3a4d21694d1572f417c90d67bcfd60fab64f0f8a72e79b6aae

创建并运行容器取名web2,链接到web1和其通信,端口号自动映射

web11:web:11 名字和别名
[root@docker2 apache]# docker run -itd -P  --name web22 --link web11:web11 centos:7/bin/bash
21db10af75fe22a48b47a259a260b7d6d69336e9a2a087a6255e9e508d4f33ee
[root@docker2 apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED  STATUS              PORTS                    NAMES
21db10af75fe        centos:7            "/bin/bash"              5 seconds ago  Up 4 seconds                                 web22
075e9cdd940e        centos:7            "/bin/bash"              About a minute ago  Up About a minute                            web11

进入 容器web22 测试

[root@docker2 apache]# docker exec -it  21db10af75fe   /bin/bash
[root@21db10af75fe /]# ping web11
PING web11 (172.17.0.4) 56(84) bytes of data.
64 bytes from web11 (172.17.0.4): icmp_seq=1 ttl=64 time=0.077 ms
64 bytes from web11 (172.17.0.4): icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from web11 (172.17.0.4): icmp_seq=3 ttl=64 time=0.044 ms
64 bytes from web11 (172.17.0.4): icmp_seq=4 ttl=64 time=0.122 ms
64 bytes from web11 (172.17.0.4): icmp_seq=5 ttl=64 time=0.081 ms
64 bytes from web11 (172.17.0.4): icmp_seq=6 ttl=64 time=0.178 ms
64 bytes from web11 (172.17.0.4): icmp_seq=7 ttl=64 time=0.044 ms

场景:我们无需暴露 web12 的情况下,让web12应用使用web11

[root@docker2 ~]# docker exec -it web11 /bin/bash
[root@075e9cdd940e /]# ping web12
ping: web12: Name or service not known
[root@075e9cdd940e /]#

猜你喜欢

转载自blog.csdn.net/BIGmustang/article/details/108699404