前言
容器中必须运行一个进程,但是我们可以指定运行的进程。如果没有指定容器的进程,则会运行镜像里CMD所指定的进程。可通过如下命令查看CMD所指定的进程,
有很多对象,如镜像、容器、网络等,如需查看其属性,通用语法如下:
docker 属性类型 inspect 对象名称
docker image inspect nginx
docker containerd inspect c1
#可直接写docker inspect c1
docker network inspect net1
一、管理容器
查看容器
docker ps
#查看正在运行的容器
docker ps -a
#查看所有容器
创建容器
docker run 镜像名
容器正常运行时,状态为up。如果CMD指定的是bash进程,则进程只会存在一瞬间,想要bash进程一直存在就需给其一个终端。
docker run -it hub.c.163.com/library/centos
#-it参数,退出该容器时容器会自动挂掉,如果想该容器在后台运行需:
docker run -dit hub.c.163.com/library/centos
#docker run -dit --restart=always hub.c.163.com/library/centos
--restart=always 为重启docker时该容器自动启动
进入到容器为attach,不进入到容器为detach,创建容器时不进入到容器加-d。docker中-d和-it可一起使用,nerdctl等其他的不可以一起使用。
使用--name为容器起名,否则容器名随机分配。
docker run -dit --restart=always hub.c.163.com/library/centos sleep 10d
#sleep 10d指该容器运行十天
#加-e可指定变量
docker run -dit --restart=always -e xx=AA -e yy=bb hub.c.163.com/library/centos
进入容器后就会有指定的变量
为容器添加端口
docker run -d -p N:M
docker run -d -p M
#M容器端口,N宿主机端口,如果只写容器端口则随机指定宿主机端口
可通过nerdctl port 容器名 来查看容器的端口及指定的宿主机端口
停止容器、启动容器、重启容器
nerdctl stop xxx (容器名) #停止容器
nerdctl start xxx (容器名) #启动容器
nerdctl restart xxx (容器名) #重启容器
查看容器内运行的进程
nerdctl top xxx (容器名)
查看容器内的输出(日志)
nerdctl logs xxx (容器名)
nerdctl logs -f xxx (容器名)
#-f为查看不退出,有新的日志会持续显示
在容器中执行命令
nerdctl exec xxx (容器名) ls /root (要执行的命令)
#容器外执行命令
nerdctl exec -it xxx (容器名) bash
#进入容器,输入exit退出
nerdctl暂不支持attach进入容器
可以将宿主机内的东西复制到容器中
也可将容器内文件拷贝到宿主机来
nerdctl cp web1:/etc/hosts hosts
数据卷
在容器中添加的任何数据都会被写入容器层,无论容器重启停止运行启动,数据都会在。但只要删除了容器,容器层也会被删除。如果希望数据永久保存(容器删除后还存在),就需要做数据卷。
-v M
#只写M表示容器的目录,宿主机则随机生成一个挂载点
-v N:M
#N表示宿主机目录
例如:
nerdctl run -it --name=a1 --rm -v /data nginx bash
#--rm表临时容器 -v 数据卷 没写宿主机挂载点则随机生成,可通过inspect查看mounts栏查看宿主机挂载点
nerdctl run -it --name=a1 --rm -v /xxx:/data:ro nginx bash
#ro表只读形式挂载,容器里只能读该文件夹
需根据应用的实际情况来判断挂载点
nginx-/usr/share/nginx/html/
mysql-/var/lib/mysql
apache-/var/www/html
在使用mysql镜像时,需要指定一些变量:
MYSQL_ROOT_PASSWORD root密码
MYSQL_USER 创建普通用户
MYSQL_PASSWORD 普通用户的密码
MYSQL_DATABASE 创建一个库
部署MySQL容器并挂载到宿主机的/db目录,然后在宿主机安装客户端mariadb
通过如下命令查看容器db的ip地址
进入数据库
查看数据库并创建新的数据库
查看宿主机的/db下,发现aa已经存储
如果将该容器删除并重新创建数据库容器并挂载/db,登录数据库后会发现aa库依然可以连接到。