docker容器操作

可以把镜像运行成容器,一个镜像可以运行出多个容器


案例(把centos7 运行成容器)

# --name=centos7 容器名
# run :创建并运行
# -di :创建出容器并运行,命令行还在宿主机
docker run  -di --name=centos7 centos:centos7

容器操作命令

# 查看正在运行的容器
docker ps

# 查看所有容器
docker ps -a

# 查看最后一次运行的容器
docker ps -l
    
# 启动停止的容器
docker start id/名字

# 停止运行的容器
docker stop 7d5e

# 停止所有在运行的容器
docker stop `docker ps -q`
    
# 删除容器
docker rm 容器id

# 一次性删除所有容器
docker rm `docker ps -a -q`

# 一次性删除所有镜像
docker rmi `docker images -q`

# 进入到容器内部
docker exec -it 容器id /bin/bash
docker exec -it 90fd0665494f /bin/bash

记住四条:

docker ps
docker ps -a
docker start
docker stop

run 运行容器操作

# run :运行容器
    -如果容器不存在,会先创建再运行
    -create 容器,run运行
    - 创建并运行容器

# 运行一个centos7容器
    docker run -id --name=容器名字 镜像:标签   # 创建并运行容器,命令行在宿主机上
    docker run -it --name=容器名字 镜像:标签   #创建并运行容器,命令行在容器内部

# 1 docker run 把镜像运行成容器
	-docker run 参数
    	-i 表示运行容器
        -d 以守护式容器在后台运行,用这个参数创建出来的容器,命令行还在宿主机上,没有进入到容器内部
        -t 表示容器启动后会进入容器命令行。加入这参数后,容器创建就能登录进去。即分配一个伪终端。
        --name 指定容器名字,如果不指定,会随机一个名字
        -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
        -v 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上

# 2 案例 -id
    docker run -id --name=centos centos:7  # 执行完,命令在宿主机上,可以通过命令查看正在运行的容器
        
# 3 案例  -it
    docker run -it --name=centos centos:7 # 执行完,命令行在容器内,容器很干净,几乎啥软件都没有,可以exit退出到宿主机---》只要退出,容器就停了

# 4 创建一个python3.9容器---》不进入
	docker run -id --name=python python:3.9
        
        
# 5 启动一个centos容器并且进入,名字叫mycentos,在内部装个vim,然后退出
	1 docker run -id --name=mycentos centos:centos7
    2 在宿主机
    3 docker exec -it mycentos /bin/bash  # 新开了一个bash进程
    4 yum install vim -y
    5 exit
    6 容器停还是没有停?没有,因为容器运行时的 bash 进程没有结束     

# 6 重点:
	如果创建容器并进入---》只要退出---》容器就停了
    容器要运行,必须有个前台进程在运行,并且是夯住(阻塞)的,否则容器就停了
    
# 7 进入到容器内部
	# 在容器上执行命令
	docker exec 容器名字/id  命令
    # 利用这个特性-->进入到容器内部
    docker exec -it 容器名字/id /bin/bash
    docker exec -it python sh
    # 退出,结束掉 /bin/bash
	exit

-v 映射操作

# 运行出一个 centos7 容器,不进入, 做目录映射
# 把宿主机的 /root/lqz文件夹  映射到 容器内部的 /zeng文件夹
# -v可以写多个,可以是文件或文件夹

1 cd # 回家 前提是你是root用户
2 mkdir zeng# 在root目录下创建zeng文件夹
3 运行容器,做目录映射
docker run -id --name=centos7 -v /root/zeng:/zengcentos:centos7
4 在宿主机的 /root/zeng 下新建 xx.txt
vim xx.txt

5 来到容器内部:看这个文件在不在
cat xx.txt

6 他们是相互影响的:
    容器内部修改文件---》会影响外部
    外部修改文件---》影响内部


# 目录映射好处是,后期咱们部署django项目
    1 有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
    2 运行mysql容器---》mysql配置文件,数据data目录,放在宿主机上做好映射
    	如果 mysql容器---》表数据,放到容器中---》如果删了容器---》数据库全没了
    	表数据,放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在

-p 端口映射操作

# -p参数:端口映射  容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了

# 启动的mysql的root密码是123456

# 启动mysql容器  -p 宿主机端口:容器端口
# 以后台守护进程运行mysql容器,mysql的root用户密码是123456,宿主机和容器做了端口映射
docker run -id --name=mysql5.7 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7


#  netstat -nlp |grep 3307 查看本机80端口占用情况
# 查看宿主机 3307端口占用情况
yum install net-tools -y
netstat -nlp | grep 3307 # 被docker占了

# 以后访问宿主机3307端口就等于访问容器的3306端口

# win机器可以远程链接 mysql
	-命令行链接:mysql -h 10.0.0.110 -P 3307 -uroot -p
    -Navicat: 链接,创建zeng数据库
    -python:
    
# 宿主机--》进入到容器内部--》进入到mysql,查看有没有创建zeng这个库
	docker exec -it mysql5.7 /bin/bash # 进入容器内部
    mysql -uroot  -p  # 进入mysql
    show databases;  # 查看所有数据库

文件拷贝操作(宿主机执行)

# 容器的文件copy到宿主机上(不是在容器内执行)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp  0a9633190cb9:/xx.txt /root/lqz/lqz.txt
# 宿主机的文件copy到容器中
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp /root/lqz/xx.txt  0a9633190cb9:/xx.txt

查看容器IP地址

docker inspect 容器名称  # 查看容器的详细描述,很多
docker inspect 0a9633190cb9 --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
posted @ 2024-03-12 21:51  wellplayed  阅读(4)  评论(0编辑  收藏  举报