文章目录
docker容器介绍、常用命令
仓库:保存镜像的地方
镜像:启动容器的模板
容器:对外提供服务的实例
- 容器就是对外提供服务的一个实例(进程)
- 容器启动的必要条件:容器内至少有一个进程运行在前台
- 容器是基于镜像运行的,而镜像是放在仓库里的
思维导图:
1.格式参数
- 若要创建的容器仓库没有,则会自动从网上拉取,然后再创建(运行)
# 格式
docker run [参数] [镜像名称] [运行容器的启动命令]
# 参数
-d : 以守护进程的方式运行一个容器
docker run -d [镜像名称] [cmd]
--name : 指定容器的名称
docker run -d --name [容器名称] [镜像的名称] [cmd]
-p : 指定端口映射
docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
-P :随机端口映射
docker run -d -P [镜像名称] [cmd]
-i : 打开标准输出
-t : 创建一个伪终端
docker run -it [镜像名称] [cmd]
-v : 挂载目录到容器中
docker run -v 宿主主机目录:容器内目录 [镜像名称] [cmd]
--rm : 容器生命周期结束时立即删除
docker run --rm [镜像名称] [cmd]
-e : 在容器中创建一个环境变量
docker run -e NAME=Centos -d [镜像名称] [cmd]
--link : 连接上一个容器,实现网络互通
docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
-h : 设置容器主机名
docker run -h "主机名" [镜像名称] [cmd]
2.创建容器
- 创建容器,类似于运行一个服务、进程
# 先查看当前仓库存在的镜像(镜像运行起来就叫容器)
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test hello cf6cd613bcad 14 hours ago 133MB
mysql 5.7 a70d36bc331a 8 weeks ago 449MB
1.创建一个仓库已有的容器(运行一个已有的镜像)
[root@docker ~]# docker run -d nginx
ab7d5c1e42eb52cdce2dfa3185d1cf771bce314d951f6259aa9b9c51a6a5abd8
2.创建一个仓库没有的容器(运行一个不存在的镜像)# 会自动拉取(下载),再创建
[root@docker ~]# docker run -d redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
a076a628af6f: Already exists
f40dd07fe7be: Pull complete
ce21c8a3dbee: Pull complete
ee99c35818f8: Pull complete
56b9a72e68ff: Pull complete
3f703e7f380f: Pull complete
Digest: sha256:0f97c1c9daf5b69b93390ccbe8d3e2971617ec4801fd0882c72bf7cad3a13494
Status: Downloaded newer image for redis:latest
855ecad74c0d50e00ee1662135d5467a0b31e776ed9300742c60746c05682576
3.查看两个服务
[root@docker ~]# docker ps | grep nginx
ab7d5c1e42eb nginx "/docker-entrypoint.…" Up 3 minutes 80/tcp
[root@docker ~]# docker ps | grep redis
855ecad74c0d redis "docker-entrypoint.s…" Up About a minute 6379/tcp
3.查看容器
- 查看本机的容器列表
# 格式
docker ps [参数]
docker ps # 查看当前系统中正在运行的容器列表
# 参数
-a : 查看系统中所有的容器。
-q : 仅显示容器的ID
-qa:同上
4.启动容器
- 前提需要先run起来,由镜像变为容器,才能启动
docker run -d --name nginx2 nginx
docker start nginx2
5.停止容器
- 停止后,若要再启动可以直接再start,停止后有存活周期,ps -a可查看,过了存活周期需重新run~
docker stop nginx2
6.删除容器
# 格式
docker rm [容器名称|ID]
# 参数
-f : 强制删除
docker rm -f [容器名称|ID]
# 清空容器两种方式:
docker rm $(docker ps -qa)
docker rm `docker ps -qa`
7.查看容器
# 格式
docker inspect [容器名称|ID]
[root@docker ~]# docker inspect 8cbafe06c56c
{
"Id": "8cbafe06c56c7ea43d356500ad9e4d73b1aa55313562e25078902250aea6689a",
"Created": "2021-03-19T16:16:51.902798571Z",
"Path": "/bin/bash",
···
# 检测容器运行状态
[root@docker ~]# docker inspect -f '{{.State.Running}}' 888bdfd4a5d7
true
7.复制命令
前提:针对于运行中的容器
# 先查看运行中的容器
[root@docker ~]# docker ps
8cbafe06c56c centos "/bin/bash" 15 minutes ago Up 15 minutes cent_name
1.复制文件到容器内
docker cp [宿主主机文件路径] 容器ID:容器内路径
[root@docker ~]# docker cp bianliang.sh 8cbafe06c56c:/etc/q.sh
# 查看
[root@docker ~]# docker exec -it 8cbafe06c56c ls /etc/q.sh
/etc/q.sh
=======================================================================================
2.复制文件到容器外
docker cp 容器ID:容器内路径 [宿主主机文件路径]
[root@docker ~]# docker cp cent_name:/etc/bianliang.sh /tmp/123.sh
# 查看
[root@docker ~]# ll /tmp/
total 16
-rwxr-xr-x 1 root root 178 Nov 17 20:41 123.sh
8.进入容器
# 进入容器一般有四种
1、exec : 在容器外向容器内执行一个命令(官方推荐)
docker exec [参数] [容器的名称是ps内的名称|ID] [cmd]
# 容器外查看
[root@docker ~]# docker exec 8cbafe06c56c ls
bin
dev
···
# 进入容器
[root@docker ~]# docker exec -it f36ca3a2d063 bash
root@f36ca3a2d063:/#
2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
docker attach [容器ID|名称]
3、nsenter : 建立一个管道连接上容器主ID
nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid
4、ssh : 通过ssh连接
9.退出容器
1.ctrl + PQ # 保持容器运行的情况下退出:
[root@docker ~]# docker ps | grep centos
59f4a00cc257 centos "/bin/bash" 2 minutes ago Up 2 minutes recursing_galileo
2.exit # 直接退出
[root@docker ~]# docker run -it centos
[root@d2b5de710d3f /]# exit
exit
[root@docker ~]# docker ps | grep centos
3.再次进入则需要指定-it打开窗口,跟上bash
[root@docker ~]# docker exec -it f36ca3a2d063 bash
root@f36ca3a2d063:/#
10.pull国外镜像源脚本
用法:sh /root/pull.sh gcr.io/google-samples/xtrabackup:1.0
#/bin/bash
# 参考:https://cloud.tencent.com/developer/article/1353088
# 用法:pull国外镜像时,命令为:sh /root/pull.sh gcr.io/google-samples/xtrabackup:1.0
image=$1
echo $1
img=`echo $image | sed 's/k8s\.gcr\.io/anjia0532\/google-containers/g;s/gcr\.io/anjia0532/g;s/\//\./g;s/ /\n/g;s/_/-/g;s/anjia0532\./anjia0532\//g' | uniq | awk '{print ""$1""}'`
echo "docker pull $img"
docker pull $img
echo "docker tag $img $image"
docker tag $img $image
11.作业
- 使用网桥实现容器互联