Docker-run命令详细讲解

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

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

Docker基本情况

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

Dockerfile

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

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

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

启动基本参数

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

ruby 复制代码
#效果是一样的,启动则退出
docker run centos:7
docker run -d centos:7
#启动则进入容器,exit退出容器,则容器关闭
[root@localhost ~]# docker run -it centos:7[root@b914ccb36e5c /]# 

#会阻塞当前终端操作,中断终端则容器退出
docker run nginx
#不会阻塞当前终端,容器会持续在后台运行
docker run -d nginx

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

添加环境变量

bash 复制代码
# 创建容器,注入数据库密码环境变量
# 这里只是演示,具体请设置强密码
[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> 

添加端口映射

bash 复制代码
[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                               NAMES7a559247280c   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

#这里的端口都是docker进程在监听
[root@localhost ~]# netstat -lnp |grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7070/docker-proxy

添加磁盘挂载

perl 复制代码
# 容器外面的数据文件可以挂载到容器内部
# 容器里面创建的文件实际会创建到主机里面
[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

添加主机名

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

添加容器名字

csharp 复制代码
# 容器名字在最后,没添加就是随机名字
[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

退出则删除

csharp 复制代码
# 容器退出以后,容器就被自动删除
[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

csharp 复制代码
# 限制了只给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

限制内存

csharp 复制代码
# 限制以后,这里的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

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
vvw&13 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
大哥_ZH17 分钟前
Linux umami在国产麒麟系统安装网站统计工具(只能上国内网站的系统)
linux·服务器
小池先生17 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
o(╥﹏╥)33 分钟前
在 Ubuntu 上安装 VS Code
linux·运维·vscode·ubuntu·vs
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器1 小时前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_433618441 小时前
shell 编程(三)
linux·运维·服务器
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行1 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate