Docker容器

Docker容器

1、创建容器

#创建容器的格式:docker run [option] image [cmd]

#docker run 运行流程
1、检查本地是否有指定镜像,如果没有则去对应的仓库下载镜像
2、启动容器,如果指定了命令则使用指定的命令,如果没有则使用默认的命令
3、返回容器ID

[root@web01 ~]# docker run -d nginx

1.1容器启动参数

参数 释义
-d 以守护进程方式运行
-p 指定映射端口
-P 随机映射端口
-i 保持标准输入打开
-t 分配一个伪终端
-v 设置挂载文件到主机上
--rm 当容器关闭时自动删除
--name 为启动的容器设置一个名字
--network 指定使用哪个网络
参数 释义
-e 设置容器中的环境变量
--link 链接到另一个容器
-h 指定容器内的主机名
–privileged=true 容器的特权模式

1.2参数详解

#	-d			以守护进程的方式启动
[root@web01 ~]# docker run -d nginx

#	-p			指定端口映射
[root@web01 ~]# docker run -d -p 8080:80 nginx
fb5abb9bf42cc92a9ee2849f6044dd6dff757acd27fe5ce5744dde9f96f1c610
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
fb5abb9bf42c   nginx     "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   0.0.0.0:8080->80/tcp   sweet_jackson

#	-P			随机端口映射
[root@web01 ~]# docker run -d -P nginx
3cf2ff5b1e26dcf0aca8bb3adc2b9c92c841f96a601570c6b17dcb9f989ffdca
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                   NAMES
3cf2ff5b1e26   nginx     "/docker-entrypoint.…"   4 seconds ago    Up 4 seconds    0.0.0.0:49153->80/tcp   hardcore_dhawan

#	-i			打开标准输出(一般与-t同时使用)	可以进行交互
#	-t			创建一个伪终端					打开一个终端页面
[root@web01 ~]# docker run -it centos
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
[root@3095cbb5c255 /]# 

#	-v			挂载目录到容器中
				PS:docker run -v 宿主机目录:容器内目录
[root@web01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    f6d0b4767a6c   2 months ago   133MB
centos       latest    300e315adb2f   3 months ago   209MB
centos       7         8652b9f0cb4c   4 months ago   204MB
[root@web01 ~]# docker run -it -v /opt:/root centos:7 bash
bash-4.2# ls /root
containerd  nginx.tar  test1.tar  test2.tar

#	--rm		容器关闭时自动删除
[root@web01 ~]# docker run -d --rm nginx
ede2d2cf56aa244007407f226be4c13dd4638f52ab9d8b0d71dd44a04f4a97a2
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
ede2d2cf56aa   nginx     "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   80/tcp    clever_nobel
[root@web01 ~]# docker stop ede2d2cf56aa
ede2d2cf56aa
[root@web01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

#	--name			为容器指定名称
					PS:为容器指定名字后,docker会自动将该名字加入dns解析
[root@web01 ~]# docker run -d --name nginx nginx
e59356f798eae2f0c96aa1051c6d25030931d89f9ece595980d87d4e6c21f917
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
e59356f798ea   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 4 seconds   80/tcp    nginx

#	--network			指定使用哪个网络
#此处指定容器使用ddff网桥
[root@web01 ~]# docker run -d --net=ddff nginx

#	-e				在容器中设置环境变量
[root@web01 ~]# docker run -it -e NGINX=nginxnginxnginx centos:7 bash
[root@9c4a31873315 /]# env
HOSTNAME=9c4a31873315
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
NGINX=nginxnginxnginx
SHLVL=1
HOME=/root
_=/usr/bin/env

#	--link			连接上一个容器,实现网络互通
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
e59356f798ea   nginx     "/docker-entrypoint.…"   8 minutes ago   Up 8 minutes   80/tcp    nginx
[root@web01 ~]# docker run -it --link nginx centos:7 bash
[root@24d4fcfbc144 /]# curl nginx
<!DOCTYPE html>
<html>
你好,这是容器e59356f798ea的nginx页面
</html>

#	-h			设置容器主机名
[root@web01 ~]# docker run -it -h ddff centos:7 bash
[root@ddff /]# hostname
ddff

#	–privileged=true
大约在0.6版,privileged被引入docker。
使用该参数,container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。

2、查看本地的容器列表

#格式
docker ps [参数]

#参数
	-a		查看所有的容器(包括停止的)
	-q		仅显示容器的ID

[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
ac71522935a1   nginx     "/docker-entrypoint.…"   37 seconds ago   Up 36 seconds   80/tcp    nginx
[root@web01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS     NAMES
79e245d3fbf8   nginx     "/docker-entrypoint.…"   3 minutes ago   Exited (0) 3 minutes ago             nginx_test
ac71522935a1   nginx     "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes               80/tcp    nginx
[root@web01 ~]# docker ps -q
ac71522935a1
[root@web01 ~]# docker ps -aq
79e245d3fbf8
ac71522935a1

3、停止和启动一个容器

#停止
docker stop [容器名称|容器ID]

#启动
docker start [容器名称|容器ID]

[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
ac71522935a1   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   80/tcp    nginx
[root@web01 ~]# docker stop nginx
nginx
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@web01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                      PORTS     NAMES
ac71522935a1   nginx     "/docker-entrypoint.…"   7 minutes ago   Exited (0) 10 seconds ago             nginx
[root@web01 ~]# docker start nginx
nginx
[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
ac71522935a1   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 3 seconds   80/tcp    nginx

4、删除容器

#格式
docker rm [容器名称|容器ID]

#参数
	-f			强制删除
	docker rm -f [容器名称|容器ID]

#清空容器小连招
docker rm -f $(docker ps -a -q)

[root@web01 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
ac71522935a1   nginx     "/docker-entrypoint.…"   14 minutes ago   Up 6 minutes   80/tcp    nginx
[root@web01 ~]# docker rm -f nginx
nginx
[root@web01 ~]# docker ps

5、查看容器内容

#格式
docker inspect [容器名称|容器ID]

#如何合理的监控docker的运行状态
docker inspect -f '{{.State.Running}}' [容器名称|容器ID]

[root@web01 ~]# docker inspect nginx
[
    {
        "Id": "sha256:f6d0b4767a6c466c178bf718f99bea0d3742b26679081e52dbf8e0c7c4c42d74",
        "RepoTags": [
            "nginx:latest"
        ],
        ......
 
 
[root@web01 ~]# docker inspect -f '{{.State.Running}}' nginx_test
true

6、复制文件

#格式
dockers cp 源路径 目标路径

1、将宿主机的文件复制到容器内
[root@web01 ~]# docker cp /opt/test.txt 1f82305cbabf:/root
[root@1f82305cbabf /]# cd /root
[root@1f82305cbabf ~]# ls
anaconda-ks.cfg  test.txt

2、将容器内的文件复制到容器外
[root@web01 ~]# docker cp 1f82305cbabf:/root/test222.txt /opt
[root@web01 ~]# ll /opt
-rw-r--r-- 1 root root 0 Mar 19 19:47 test222.txt

7、进入容器

进入容器一般有四种方式

7.1 exec

#exec
#在容器外面向容器内执行一个命令(官方推荐)
#在容器中新建一个bash进程
#	docker exec [参数] [容器名称|容器ID] [cmd]

[root@web01 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
84880f80100a   centos:7   "/bin/bash"   2 minutes ago    Up 2 minutes             optimistic_brahmagupta
[root@web01 ~]# docker exec -it 84880f80100a bash
[root@84880f80100a /]#

7.2 attach

#attach
#在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
#直接接管容器的主bash进程
#	docker attach [容器ID|容器名称]

7.3 nsenter

#nsenter
#建立一个管道连接上容器主ID
#	nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid

7.4 ssh

#通过ssh连接到容器
posted @ 2022-10-16 21:27  大胡萝卜没有须  阅读(87)  评论(0编辑  收藏  举报