前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Docker-run命令详细讲解

Docker-run命令详细讲解

作者头像
运维小路
发布2024-11-26 16:13:18
发布2024-11-26 16:13:18
2510
举报
文章被收录于专栏:运维小路

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令(本小节属于)

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

上小节我们从docker的原理上来讲解了下docker的运行机制,今天我们就从实际操作来体验下docker run的在运行这些操作容器。

我们在Docker被墙以后,我为什么这样做,里面提到过镜像实际上分类,一种是操作系统镜像,一种是业务镜像。里面有些例子可能不是很合适。从我们上小节的例子可能分为是否有前台进程来更适合一点。针对不同的镜像会使用不同的参数,下面就针对这些参数做详细说明。

启动基本参数

这些参数的组合代表了这个容器的运行方式及能否正常启动

代码语言:javascript
复制
#效果是一样的,启动则退出
docker run centos:7
docker run -d centos:7

#启动则进入容器,exit退出容器,则容器关闭
[root@localhost ~]# docker run -it centos:7
[root@b914ccb36e5c /]# 
代码语言:javascript
复制
#会阻塞当前终端操作,中断终端则容器退出
docker run nginx

#不会阻塞当前终端,容器会持续在后台运行
docker run -d nginx

下面的这些参数不影响容器是否启动成功,但是它能决定能否按照我们的预期方式进行运行。

添加环境变量

代码语言:javascript
复制
# 创建容器,注入数据库密码环境变量
# 这里只是演示,具体请设置强密码
[root@localhost ~]# docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw 192.168.31.43:5000/mysql:5.7
da6a4018d3c1e47b1fae3f0adb63ff78f3ef7fcde7899158e0caaf6da43a188a
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED         STATUS         PORTS                               NAMES
da6a4018d3c1   192.168.31.43:5000/mysql:5.7   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   3306/tcp, 33060/tcp                 jolly_euler


#进入容器,并使用注入的密码进行登录mysql
[root@localhost ~]# docker exec -it da6 bash
bash-4.2# mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

添加端口映射

代码语言:javascript
复制
[root@localhost ~]# docker run -d -p80:80 192.168.31.43:5000/nginx
7a559247280c4c6211c89197b2808ca326a0646f644f0433b04a6e70fef0d2ad
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                         COMMAND                  CREATED             STATUS             PORTS                               NAMES
7a559247280c   192.168.31.43:5000/nginx      "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds       0.0.0.0:80->80/tcp, :::80->80/tcp   stoic_hodgkin
代码语言:javascript
复制
#这里的端口都是docker进程在监听
[root@localhost ~]# netstat -lnp |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7070/docker-proxy

添加磁盘挂载

代码语言:javascript
复制
# 容器外面的数据文件可以挂载到容器内部
# 容器里面创建的文件实际会创建到主机里面
[root@localhost ~]# ls
centos7.tar.gz
[root@localhost ~]# docker run -it -v /root:/root centos:7 
[root@2eb1e448090b /]# ls /root/
centos7.tar.gz
[root@2eb1e448090b /]# touch /root/aaa
[root@2eb1e448090b /]# exit
exit
[root@localhost ~]# ls
aaa  centos7.tar.gz

添加主机名

代码语言:javascript
复制
# 可以看到容器的主机名是我们设置的,并不是随机生成
[root@localhost ~]# docker run -h test001 -it centos:7
[root@test001 /]# 

添加容器名字

代码语言:javascript
复制
# 容器名字在最后,没添加就是随机名字
[root@localhost ~]# docker run  -itd centos:7
90b11f48c37dd2f8483a2ff2ae6f3797767ce508a465fd9cfda57eab57af5e53
[root@localhost ~]# docker run  -itd --name centos7 centos:7
a9c28148a23c6ae2a8f77cc7258ffd7a32ff9901094b5c56b256515ac65f0c7d
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
a9c28148a23c   centos:7   "/bin/bash"   11 seconds ago   Up 10 seconds             centos7
90b11f48c37d   centos:7   "/bin/bash"   43 seconds ago   Up 42 seconds             optimistic_shirley

退出则删除

代码语言:javascript
复制
# 容器退出以后,容器就被自动删除
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker run -it --rm centos:7
[root@83510e3d5cdd /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@83510e3d5cdd /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

限制cpu

代码语言:javascript
复制
# 限制了只给0.5核,所以容器里面的死循环可以跑到50%
[root@localhost ~]# docker run -itd --cpus="0.5" centos:7
1a408a957c2c60519e3f15aed8b23ae6d069ea14c30710aa792d93689331c508

[root@localhost ~]# docker stats 1a4

CONTAINER ID   NAME             CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O    PIDS
1a408a957c2c   youthful_bassi   49.94%    1.262MiB / 990.9MiB   0.13%     656B / 0B   336kB / 0B   2

限制内存

代码语言:javascript
复制
# 限制以后,这里的limit就不再是宿主机的内存,而是我们给的限制
[root@localhost ~]# docker run -itd -m 512M centos:7
1888ebd8c68bc2edca3410049557e31d20cb9058ead658a891c13007ba39e4b2
[root@localhost ~]# docker stats 1888

CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
1888ebd8c68b   gallant_brattain   0.00%     668KiB / 512MiB     0.13%     586B / 0B   3.82MB / 0B   1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档