docker容器

docker容器操作

从根本上讲,一个容器不过是一个正在运行的进程,并对其应用了一些附加的封装功能,以使其与主 机和其他容器隔离。容器隔离的最重要方面之一是每个容器都与自己的专用文件系统进行交互。该文件系 统由Docker镜像提供。镜像包括运行应用程序所需的一切代码或二进制文件,运行时的依赖项以及所需 的任何其他文件系统对象

 创建容器

使用centos7来创一个容器

此时创建的容器是未运行的、

可以使用docker create创建一个容器,创建后,可以通过docker ps或者docker ps -a命令进行查看

[root@node1 ~]# docker images 
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    39286ab8a5e1   4 weeks ago   188MB
centos       7         eeb6ee3f44bd   2 years ago   204MB

[root@node1 ~]# docker create -it centos:7
58ccb862c79156de3af68da242f947878f2b78c9df93568763359e0d0f500334

[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS    PORTS     NAMES
58ccb862c791   centos:7   "/bin/bash"   10 seconds ago   Created             compassionate_moore

启动容器

[root@node1 ~]# docker start 58ccb862c791
58ccb862c791

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED              STATUS         PORTS     NAMES
58ccb862c791   centos:7   "/bin/bash"   About a minute ago   Up 3 seconds             compassionate_moore

 使用docker create 命令新建的容器处于停止状态,可以使用docker start命令来启动它

 运行容器

除了创建容器后通过start命令来启动,也可以直接新建并启动容器。所需要的命令主要为docker run,等价于先 执行docker create命令,再执行docker start命令。下面的命令启动一个bash终端,运行用户进行交互。

[root@node1 ~]# docker run -it centos:7 /bin/bash

[root@73df7b6fe865 /]# exit            // 此时进入了交互模式
exit

                // 退出后使用docker ps查看
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                     PORTS     NAMES
73df7b6fe865   centos:7   "/bin/bash"   12 seconds ago   Exited (0) 5 seconds ago             dazzling_engelbart

对于创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出。这是因为对于容器来说,当 其中的应用退出后,容器的使命完成,也就没有继续运行的必要了。

 暂停容器

可以使用docker pause 命令来暂停一个运行中的容器

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
58ccb862c791   centos:7   "/bin/bash"   7 minutes ago   Up 6 minutes             compassionate_moore

[root@node1 ~]# docker pause 58ccb862c791
58ccb862c791
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS                     PORTS     NAMES
58ccb862c791   centos:7   "/bin/bash"   8 minutes ago   Up 7 minutes (Paused)                compassionate_moore

暂停后的容器恢复到运行状态

 处于paused状态的容器,可以使用docker unpause命令来恢复到运行状态。

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a6831bba185 centos:7 "/bin/bash" 23 minutes ago Up 20 minutes (Paused) exciting_wilbur

[root@docker ~]# docker unpause 8a6831bba185
8a6831bba185

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a6831bba185 centos:7 "/bin/bash" 23 minutes ago Up 20 minutes exciting_wilbu

停止容器

 可以使用docker stop来终止一个运行中的容器。

[root@docker ~]# docker stop 8a6831bba185
8a6831bba185

[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e96703cf24 centos:7 "/bin/bash" 10 minutes ago Exited (0) 10 minutes ago mycentoscy
b6b993b7b2a4 centos:7 "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago centos
7ab8edfe7f23 centos:cy "/bin/bash" 19 minutes ago Exited (0) 16 minutes ago modest_brown
8a6831bba185 centos :7 " /bin/bash" 30 minutes ago Ex ited (137) 12 seconds ago
exciting_wilbur


此时,执行docker container prune命令,会自动清除掉所有处于停止状态的容器。
[root@docker ~]# docker container

进入容器

 在使用-d参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入: docker attach:不建议大家使用docker attach,因为退出容器终端,会导致容器的停止。 docker exec:推荐大家使用docker exec命令,因为退出容器终端,不会导致容器的停止。

attach

[root@docker ~]# docker attach httpd
[root@e710eb97bcbc /]# exit
exit
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e710eb97bcbc httpd:cycy "/bin/bash" 53 seconds ago Exited (0) 21 seconds ago

exec

[root@node1 ~]# docker run -itd --name nginx12 nginx:latest /bin/bash
ebb9a6d499f9116f0937e41a596b1841b1c08bc4fe6960050ebd2aa4d635b746
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
ebb9a6d499f9   nginx:latest   "/docker-entrypoint.…"   4 seconds ago   Up 4 seconds   80/tcp    nginx12

[root@node1 ~]# docker exec -it nginx12 /bin/bash
root@ebb9a6d499f9:/# ls
bin   dev		   docker-entrypoint.sh  home  lib64  mnt  proc  run   srv  tmp  var
boot  docker-entrypoint.d  etc			 lib   media  opt  root  sbin  sys  usr

root@ebb9a6d499f9:/# exit
exit

[root@node1 ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
ebb9a6d499f9   nginx:latest   "/docker-entrypoint.…"   43 seconds ago   Up 42 seconds   80/tcp    nginx12

删除容器

删除容器使用docker rm命令,只能删除停止的容器

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
82aec4e96622 httpd:cycy "/bin/bash" 3 minutes ago Up 3 minutes 80/tcp httpd
[root@docker ~]# docker stop httpd
httpd
[root@docker ~]# docker rm httpd
httpd
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NA

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除还处于运行状态的容器。如果要直 接删除一个运行中的容器,可以添加-f参数。

[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74c75d56383b httpd:cycy "/bin/bash" 3 seconds ago Up 2 seconds 80/tcp httpd

[root@docker ~]# docker rm httpd
E r r o r r e s p o n s e f r o m d a e m o n : Y o u c a n n o t r e m o v e a r u n n i n g c o n t a i n e r
74c75d56383b27e0d979cfda1db4c894d
9a367270a208ef72cc04e8550f6fc55. Stop the container before attempting removal or force remove

[root@docker ~]# docker rm httpd -f
httpd

[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM

 导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用docker的导入和导出功能,这也是docker 自身提供的一个重要特性。

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令。“-o”选项也可以重定向“>”来代替

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
ebb9a6d499f9   nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   80/tcp    nginx12
[root@node1 ~]# docker export -o test-nginx.tar ebb9a6d499f9
[root@node1 ~]# ls
anaconda-ks.cfg  nginx  test-nginx.tar

导入容器

 docker import导入容器

导入容器,导出的文件又可以使用docker import命令导入变成镜像。

[root@node1 ~]# docker import test-nginx.tar mytest:nginx1
sha256:e10888e9e2e615505a3bcc6a450fcb6311e47d2a68f984ff1303e06bb00a2c09

[root@node1 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mytest       nginx1    e10888e9e2e6   6 seconds ago   186MB
nginx        latest    39286ab8a5e1   4 weeks ago     188MB

 docker容器的应用

1、映射随机端口

当我们启动一个web容器的时候,可以将容器的端口映射宿主机上面,这样便于我们访问该web服务器。 -P参数将容器内部使用的80端口映射到宿主机的随机端口上来。

[root@node1 ~]# docker run --name nginx -itd -P nginx:latest 
eeb0c9c83a41b5a5a3608612a7d5b98328aad14f9a34d35dfcefd5dc2b5c4983

[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                       NAMES
eeb0c9c83a41   nginx:latest   "/docker-entrypoint.…"   57 seconds ago   Up 56 seconds   0.0.0.0:32768->80/tcp, [::]:32768->80/tcp   nginx

 2、映射指定端口

我们也可以通过-p参数将容器内的80端口映射到宿主机的指定端口上,

[root@docker ~]# docker run --name httpd2 -itd -p 8080:80 httpd:latest
d5e5e991b5dc5becad63a8ba874c0ac583fea34a2b63081736aa2ea1f9d8ec6f
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
d5e5e991b5dc httpd:latest "httpd-foreground" 4 seconds ago Up 3 seconds 0.0.0.0:8080- >80/tcp, :::8080->80/tcp httpd2

 查看容器日志

[root@node1 ~]# docker logs nginx

/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2024/09/12 10:34:28 [notice] 1#1: using the "epoll" event method
2024/09/12 10:34:28 [notice] 1#1: nginx/1.27.1
2024/09/12 10:34:28 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14) 
2024/09/12 10:34:28 [notice] 1#1: OS: Linux 5.14.0-427.13.1.el9_4.x86_64
2024/09/12 10:34:28 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1073741816:1073741816
2024/09/12 10:34:28 [notice] 1#1: start worker processes
2024/09/12 10:34:28 [notice] 1#1: start worker process 28

查看容器详细信息

root@node1 ~]# docker inspect nginx
[
    {
        "Id": "eeb0c9c83a41b5a5a3608612a7d5b98328aad14f9a34d35dfcefd5dc2b5c4983",
        "Created": "2024-09-12T10:34:27.942912588Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 4330,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2024-09-12T10:34:28.021736165Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

 docker容器部署WEB服务器

1、需要创建一个nginx站点
2、创建目录,用于存放映射数据。其中www目录将映射为nginx容器配置的虚拟目录;logs目录将映射为nginx容器的日志目录;conf目录里的配置文件将映射为nginx容器的配置文件
3、将主机端口20000映射到容器的80端口上
4、网页内容为welcome to wuhan
5、最终能够成功访问nginx站点

 下载nginx镜像

创建映射目录

拷贝容器内nginx默认配置文件到被美帝当前目录下的conf目录

创建端口映射,目录映射

创建一个网页

 

访问

1、docker container cp 复制文件 例如,将 本地的路径 data 复制到 centos 容器的/tmp 路径下:

[root@docker ~]# docker container cp data d5e5e991b5dc:/tmp

2、docker container diff 查看变更 例如,查看 d5e5e991b5dc 容器内的数据修改 [root@docker ~]# docker container diff d5e5e991b5dc

3、docker container port 查看端口映射

[root@docker ~]# docker container port d5e5e991b5d 

docker images  查看本地镜像
docker search  查找镜像
docker pull  下载镜像
docker  tag  给镜像打标签
docker rmi  删除镜像
docker save  导出镜像
docker load  导入镜像
docker inspect 镜像名    查看该镜像的详细信息


docker ps  查看当前系统正在运行的容器
docker ps  -a   查看当前系统中所有的容器,包括停止的容器
docker create  创建容器(但未运行)
docker  start  启动容器
docker  stop  停止容器
docker  pause  暂停容器
docker  unpause  恢复容器
docker  run  创建并运行容器  等于docker create+docker start
docker  exec  -it  容器名  /bin/bash    进入容器
docker  rm  删除容器
docker  export  导出容器
docker  import  导入容器
docker  cp  复制文件到容器里,或者将容器里的文件拉取到本地
docker  logs  查看某个容器的日志
docker  inspect  容器名   查看该容器的详细信息


docker  run  -P(大写)   随机映射端口
docker  run  -p(小写)  本地端口:容器端口   手动指定映射端口
docker  run  -v  卷的挂载,将本地的目录或者文件与容器里的目录或文件做一个映射
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值