[容器操作]

 1 #1 镜像操作
 2     -docker search
 3     -docker pull
 4     -docker images  
 5     -docker rmi
 6  
 7 #2 镜像运行,变成容器---》一个镜像可以运行处多个容器--》把一个容器当成一个虚拟机
 8     -操作系统
 9     -文件
10     -软件
11     -网络

 

(run)

 1 # 把镜像运行成容器,并且一个镜像,可以运行出多个容器!!!
 2 
 3 ------------------------------------------------
 4 
 5 # 查看正在运行的容器
 6     docker ps
 7 
 8 # 查看所有容器,包括停止的
 9     docker ps -a
10 
11 # 查看最后一次运行的容器
12     docker ps -l
13 # 删除容器:docker rm 容器名字/容器Id
14 ------------------------------------------------
15 
16 # 运行容器(其实是两步:创建容器:create,运行容器:run)
17 -如果容器没有创建,直接执行run,就会创建并运行,所以你只需要会run就行了
18 
19 run 的时候,有很多参数
20     -i:表示运行容器
21     -t:表示容器启动后会进入容器命令行。
22     加入-i -t 这两个参数后,容器创建后,就会自动进入到容器中。即分配一个伪终端。
23 
24     -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行
25     加入-i -d 这两个参数后,容器创建后,不会自动进入到容器中!!!
26 
27     --name :为创建的容器命名,如果不写,随机生成一个名字
28 
29 
30     -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),
31        可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,
32        然后共享到容器上。
33 
34     -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。
35         可以使用多个-p做多个端口映射
36 
37 
38 # docker run -id     不会进入到容器内部   -i -d  可以简写成-id
39 # docker run -it     会进入到容器内部
40 
41 ------------------------------------------------
42 ------------------------------------------------
43 
44 # 将镜像和标签 centos:7 镜像运行成一个容器   给容器起个名字  并且进入该容器
45 启动一个centos容器,名字叫mycentos,并且进入
46 docker run -it --name=mycentos centos:7
47 
48 yum install vim -y   /yum install net-tools   # 在容器中装了vim软件
49 
50 exit  # 退出,容器就停止了!!又回到了宿主机上了!!!  所以一般运行容器不用 run -it
51 容器需要创建后运行:--创建:create命令     ----运行:run
52 
53 docker start mycentos  # 启动停止的容器
54 
55 
56 # 注意:在容器里面放的所有文件,只要不是做的目录映射,都在容器里面
57 #      在宿主机里面找不到的,因为被加密了,
58 
59 ------------------------------------------------
60 
61 # 后台启动一个centos容器,名字叫youcentos,不进入容器
62 docker run -id --name=youcentos centos:7
63 
64 # 用 run -id 将镜像运行成容器,比较方便,
65 # 用docker exec -it  容器id /bin/bash 命令进入容器,这样exit退出容器,容器也不会停止!!!

【在宿主机上如何进入到容器内部】

run 时参数

 

1 # docker run 参数
2     -i 表示运行容器
3     -d 以守护式容器在后台运行,用这个参数创建出来的容器,命令行还在宿主机上,没有进入到容器内部
4     -t 表示容器启动后会进入容器命令行。加入这参数后,容器创建就能登录进去。即分配一个伪终端。
5     --name 指定容器名字,如果不指定,会随机一个名字
6     -p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
7     -v 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
 1 # 1 启动一个centos容器并且进入,名字叫mycentos,在内部装个vim,然后退出
 2     先拉python:docker pull python
 3     1 docker run -id --name=mycentos centos:centos7
 4     2 在宿主机
 5     3 docker exec -it mycentos /bin/bash  # 新开了一个bash进程
 6     4 yum install vim -y
 7     5 exit
 8     6 容器停还是没有停?没有,因为容器运行时的 bash 进程没有结束   
 9     
10 # 2 docker exec  命令
11     在宿主机,链接容器,执行命令,把命令结果返回给宿主机
12     docker exec 362a ls
13     
14     
15 # 3  进入到容器内部
16     # 在容器上执行命令
17     docker exec 容器名字/id  命令
18     # 利用这个特性-->进入到容器内部
19     docker exec -it 容器名字/id /bin/bash
20     docker exec -it python sh
21     # 退出,结束掉 /bin/bash
22     exit

 

 。

【-v参数:做目录映射】

 

 1 # 启动一个centos容器,名字叫lqz,不进入
 2 # -v参数:做目录映射  前面是文件夹在宿主机的路径  后面是映射到容器里面的路径
 3 #             注意是目录因素, 不是文件映射,所以-v后面不能写文件路径!!
 4 
 5 
 6 -------------------------------------------------------------------------------
 7 小案例
 8     # 运行出一个 centos77 容器,不进入, 做目录映射
 9     # 把宿主机的 /root/lqz文件夹  映射到 容器内部的 /lqz文件夹  容器如果没有文件夹会自动创建
10     # -v可以写多个,可以是文件或文件夹
11 
12     1 cd # 回家 前提是你是root用户
13     2 mkdir lqz  # 在root目录下创建lqz文件夹
14     3 运行容器,做目录映射
15     docker run -id --name=centos77 -v /root/lqz:/lqz centos:centos7
16     4 在宿主机的 /root/lqz 下新建 xx.txt
17     vim xx.txt
18 
19     5 来到容器内部:看这个文件在不在
20     cat xx.txt
21 
22     6 他们是相互影响的:
23         容器内部修改文件---》会影响外部
24         外部修改文件---》影响内部
25 
26 
27 
28 # 3 目录映射好处是,后期咱们部署django项目
29     1 有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
30     2 运行mysql容器---》mysql配置文件,数据data目录,放在宿主机上做好映射
31         如果 mysql容器---》表数据,放到容器中---》如果删了容器---》数据库全没了
32         表数据,放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在
33 
34         
35         
36  
37 # 4 一次性删除
38 
39 # 一次性删除所有容器
40 docker rm `docker ps -a -q`
41 # 一次性删除所有镜像
42 docker rmi `docker images -q`

 

 

 

 。

【-p参数:做端口映射】

 1 # 1  -p参数:端口映射  容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了
 2 
 3 # 2 小案例,运行一个mysql容器--》做端口映射
 4 docker run -id --name=mysql5.7 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
 5 #  -p: 启动mysql容器  -p 宿主机端口:容器端口
 6 # -e :启动的mysql的root密码是123456
 7 # 以后台守护进程运行mysql容器,mysql的root用户密码是123456,宿主机和容器做了端口映射
 8     宿主机 3307 映射容器 3306
 9   
10 ## 2.1 查看宿主机 3307端口占用情况
11 
12     #  netstat -nlp |grep 3307 查看本机80端口占用情况
13     # 查看宿主机 3307端口占用情况,在宿主机上安装命令
14     yum install net-tools -y
15     netstat -nlp | grep 3307 # 被宿主机的docker占了
16 
17 ## 2.2 远程链接宿主机的3307端口
18     以后访问宿主机3307端口就等于访问容器的3306端口
19 
20     # win机器可以远程链接 mysql
21         -命令行链接:mysql -h 192.168.241.129 -P 3307 -uroot -p  ,密码是虚拟机密码:123456
22         -Navicate: 链接,创建lqz数据库
23 
24     # 宿主机--》进入到容器内部--》进入到mysql,查看有没有创建lqz这个库
25         docker exec -it mysql5.7 /bin/bash # 进入容器内部
26         mysql -uroot  -p  # 进入mysql
27         show databases;  # 查看所有数据库

 

 

 

 

 。

【其他的操作】

 1 #1 启动容器
 2     docker start 容器id
 3 #2 停止容器
 4     docker stop 容器id
 5 
 6 #3  mysql的容器底层的操作系统是 debian 装软件需要用 
 7     apt-get update
 8     apt-get install vim -y
 9 
10 #4  文件拷贝(宿主机执行)
11     # 容器的文件copy到宿主机上(不是在容器内执行)
12     docker cp 容器名称:容器目录 需要拷贝的文件或目录
13     docker cp  0a9633190cb9:/xx.txt /root/lqz/lqz.txt
14     
15     # 宿主机的文件copy到容器中
16     docker cp 需要拷贝的文件或目录 容器名称:容器目录
17     docker cp /root/lqz/xx.txt  0a9633190cb9:/xx.txt
18      
19 # 5 查看容器IP地址    
20     docker inspect 容器名称  # 查看容器的详细描述,很多
21     docker inspect ea5f3c9ee99a --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
22     
23 # 6 在多个容器之间是可以ping通的(容器和宿主机也可以)
24     # python:172.17.0.3
25 
26     # mysql5.7:172.17.0.2
27 
28     # 宿主机--》ping 它俩
29     # 容器--》容器
30     apt-get install iputils-ping
31      ping 172.17.0.2    
32     
33 # 7 删除容器(删除已停止的容器)
34     docker rm 容器id  
35     docker rm `docker ps -a -q`
36      
37 # 8 无状态的服务(在容器中尽量运行无状态的服务)
38     -mysql reids   有状态,运行过程中产生数据,保存,容器删除,数据就没了
39     -uwsgi+django  无状态的服务  
40     
41 # 9 补充
42     1 ip地址  ip 
43         10.0.88.110
44         10.0.0.111
45         10.0.0.1
46         10.0.11.1
47     2 子网掩码 mask
48         255.255.0.0
49         
50     3 网关 gatway
51         10.0.0.1

【应用部署】

mysql 部署

 1 #0 dokcer 中部署mysql,以后不需要在宿主机上装mysql
 2     
 3 #1  没有做目录映射---》配置文件--》表数据都在容器中---》一旦删除--》所有都没了
 4 docker run -di --name=mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
 5 
 6 # 2 做目录(配置文件和数据文件)和端口映射
 7 
 8 # 做目录映射:data文件,配置文件
 9 # 创建文件夹
10 mkdir /mysql
11 mkdir /mysql/conf.d
12 mkdir /mysql/data/
13 # 配置文件
14 vi /mysql/my.cnf 
15 [client]
16 default-character-set=utf8
17 [mysqld]
18 user=mysql
19 character-set-server=utf8
20 default_authentication_plugin=mysql_native_password
21 secure_file_priv=/var/lib/mysql
22 expire_logs_days=7
23 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
24 max_connections=1000
25 
26 # 运行容器
27 docker run  -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7      第二次就换名字 
28     
29 # 创建库,创建表,插入数据
30 
31 # 关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
32  docker stop mysql2
33  docker rm mysql2
34 ##docker rm mysql -f  容器之间删了
35 
36 # 再运行起一个容器,做好目录映射,数据都回来了
37 docker run  -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 
38 
39 =====================================================
40 # 补充  -e参数--》环境变量
41     -不同镜像提供不同参数
42     -传入后放入环境变量
43     echo $MYSQL_ROOT_PASSWORD

 

 

 

 

 。

redis部署

 1 #1  拉取redis镜像
 2 docker pull redis  #最新
 3 mkdir /root/data
 4 vim /root/redis.conf
 5 
 6 # 配置文件
 7 bind 0.0.0.0
 8 daemonize NO
 9 protected-mode yes
10 requirepass 123456
11 
12 
13 # 运行
14 #启动容器时,运行的命令是什么 redis-server /etc/redis/redis.conf
15 
16 docker run -id  -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis  redis-server /etc/redis/redis.conf     
17     
18 # 在容器运行时,可以自己定制运行命名 举例:docker run -id centos:centos7 ls
19 
20 # 远程链接redis操作

 

 

 

 

nginx部署

1 # 拉取nginx镜像
2 docker pull nginx
3 
4 # run起容器
5 # docker run -id --name nginx -p 80:80 nginx
6     
7 # /usr/share/nginx/html
8 docker run -id --name nginx1 -p 8008:80 -v /root/html:/usr/share/nginx/html nginx
9 # 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

 

posted on 2024-06-20 19:57  认真的六六  阅读(9)  评论(0编辑  收藏  举报