美文网首页
docker 容器

docker 容器

作者: 慕知 | 来源:发表于2021-03-25 11:28 被阅读0次

容器就是对外提供服务的一个实例;
容器启动的必要条件:容器内至少又一个进程运行在前台

1,创建容器

#格式   
docker run [参数]  [镜像名称]    [运行容器的启动命令]


#参数
-d :以守护进程的方式运行一个容器

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



--name:指定容器的名称,将名称解析到docker DNS上
docker run -d --name [容器名称] [镜像的名称] [cmd]

[root@\ docker~]# docker run -d --name nginx_store nginx
[root@\ docker~]# docker ps
14c63482dc1d   nginx     "/docker-entrypoint.…"   50 seconds ago   Up 48 seconds   80/tcp                 nginx_store




-p:指定端口映射
     docker run -d -p 宿主机端口:容器内端口  [ 镜像名称]

[root@\ docker~]# docker run -d -p 3456:80 nginx
600266b0ad1dd9d898fdc0e4a341c1365b977f1639cba5dc316059a7a8e892e8
[root@\ docker~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
600266b0ad1d   nginx     "/docker-entrypoint.…"   6 seconds ago    Up 5 seconds    0.0.0.0:3456->80/tcp   practical_dubinsky





-P:随机端口映射
    docker run -d -p [ 镜像名称]

[root@\ docker~]# docker run -d -P redis
5c3403219107c2bdcbc2fa42a098a98d2e3119f6d71294f3d266eb46eaca82f3
[root@\ docker~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                     NAMES
5c3403219107   redis     "docker-entrypoint.s…"   3 seconds ago        Up 2 seconds        0.0.0.0:49153->6379/tcp   nice_ardinghelli





-i:打开标准输出
-t:创建一个伪终端
      docker run -it [镜像名称]

[root@\ docker~]# docker run -it centos:7 bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
[root@9b6f9b3e7885 /]#




-v:挂载目录到容器中
    docker run -v 宿主机目录:容器内目录 [镜像名称]

[root@\ docker~]# docker run -v /root:/root -it centos:7 bash
[root@2cc3f2761580 abc]# cd /root
[root@2cc3f2761580 ~]# mkdir ppp
[root@2cc3f2761580 ~]# touch /root/ppp/a.txt


[root@\ docker~]# ll ppp/
-rw-r--r-- 1 root root 0 2021-03-22 09:49 a.txt





--rm:容器生命周期结束时立即删除
    docker run --rm [镜像名称]

-e:在容器中创建一个环境变量
    docker run -e NAME=ZXX -的 [镜像名称]

[root@\ docker~]# docker run -e NAME=ZXX -it centos:7 bash
[root@1fc563bab6b7 /]# printenv
HOSTNAME=1fc563bab6b7
TERM=xterm
NAME=ZXX
... ...






--link:连接上一个容器,实现网络互通
    docker run --link 被连接的容器的名称:连接别名 [镜像名称]

[root@\ docker~]# docker run -d --name ss_nginx -P nginx
[root@\ docker~]# docker run --link ss_nginx:ss_nginx nginx




-h:设置容器主机名
    docker run -h “主机名”  [镜像名]

[root@\ docker~]# docker run -h centos -it centos:7 bash
[root@centos /]#





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

2,查看本机的容器列表

# 格式
    docker ps    查看当前系统中正在运行的容器列表


# 参数
-a :查看系统中所有的容器(包括停止的)
-q:仅显示容器的id

3,停止和启动一个容器

# 停止
   doker stop [容器的名称或者id]

# 启动(该容器必须是系统已经存在的容器)
   doker start [容器的名称或者id]

4,删除容器

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

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

# 清空容器
docker rm $(docker ps -a -q)


# 正在运行的容器需要先停止
[root@\ docker~]# docker stop sleepy_elgamal
sleepy_elgamal
[root@\ docker~]# docker rm sleepy_elgamal
sleepy_elgamal

5,查看容器内容

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

# 怎么监控docker运行状态
docker inspect -f '{{.State.Running}}' nginx


[root@\ docker~]# docker inspect -f '{{.State.Running}}' 65a4c1238d69
true

6、复制命令

[root@\ docker~]# docker ps
14c63482dc1d   nginx     "/docker-entrypoint.…"   45 minutes ago   Up 45 minutes   80/tcp                    nginx_store




1、复制到容器内
    docker cp [宿主主机文件路径]  容器ID:容器内路径

[root@\ docker~]# docker cp ./all.tarr 14c63482dc1d:/root/

[root@\ docker~]# docker exec -it 14c63482dc1d bash
root@14c63482dc1d:/# ls /root/
all.tarr










2、复制到容器外
    docker cp 容器ID:容器内路径 [宿主主机文件路径]

[root@\ docker~]# docker exec -it 14c63482dc1d bash
root@14c63482dc1d:/# touch /root/bb.txt
root@14c63482dc1d:/# exit

[root@\ docker~]# docker cp 14c63482dc1d:/root/bb.txt /opt/
[root@\ docker~]# ll /opt/
-rw-r--r-- 1 root root  0 2021-03-22 11:05 bb.txt


7、进入容器

1、exec : 在容器外向容器内执行一个命令(官方推荐)
    docker exec [参数] [容器的名称|ID] [cmd]

示例1:
[root@\ docker~]# docker exec 14c63482dc1d ls /root
all.tarr
bb.txt


示例2:

终端1:
[root@\ docker~]# docker run -it centos:7 bash
[root@aed66b3efd41 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 03:09 pts/0    00:00:00 bash
root         15      0  0 03:10 pts/1    00:00:00 bash
root         29      1  0 03:10 pts/0    00:00:00 ps -ef


终端2 开启,关闭:
[root@\ docker~]# docker exec -it aed66b3efd41 bash
[root@aed66b3efd41 /]# exit


再次查看终端1:
[root@aed66b3efd41 /]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 03:09 pts/0    00:00:00 bash
root         30      1  0 03:10 pts/0    00:00:00 ps -ef


# 官方推荐,相当于在容器里进行一个进程,退出不影响容器进程








2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
    docker attach [容器ID|名称]

# attach进入容器相当于,直接替代了容器的pid为1的总进程,当多个窗口同时使用该命令 进入该容器时,所有的窗口都会同步显示;同步阻塞同步退出(容器里的所有运行的都会结束)


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

4、ssh : 通过ssh连接

相关文章

网友评论

      本文标题:docker 容器

      本文链接:https://www.haomeiwen.com/subject/hxaacltx.html