pull redis 镜像


创建redis的镜像有几种方式,可以直接从仓库中拉取,也可以采用dockerfile文件自己编译创建。
基于已有的redis镜像,docker可以采用run,或者create->start两种方式创建容器。

1.docker run

在构建镜像,要提供访问redis的端口,-p为端口映射的
1)创建并启动,设置端口映射

[root@vm000949 ~]# docker run -p 127.0.0.1:6379:6379 -it --name="my-redis-server" -d redis 
d66037100bddcd230e0c9955bdfb9b0dbae8ce4028a81534e1693ab95737c90a
[root@vm000949 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
d66037100bdd        redis               "docker-entrypoint.sh"   6 seconds ago       Up 5 seconds        127.0.0.1:6379->6379/tcp   my-redis-server

docker run:重新创建一个容器并运行命令,语法如下:
Docker run [OPTIONS] IMAGES [COMMAND][ARG]
通常用的OPTIONS为:
-t 为容器分配一个伪输入终端
-I 以交互模式运行容器
-name 为容器指定名称
-d 以后台模式运行
-p 端口映射

查看端口映射情况,其中e24b3e0a7df0为redis的容器。

[root@vm000949 ~]# docker port e24b3e0a7df0
6379/tcp -> 127.0.0.1:6379

2)进入redis容器里面

docker exec -it e24b3e0a7df0 redis-cli
127.0.0.1:6379> set day newDay
OK
127.0.0.1:6379> get day
"newDay"
127.0.0.1:6379> exit

docker exec语法如下:

Docker exec [OPTIONS] CONTAINER COMMAND [ARG]

其中OPIONS包括:
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
这就是一个简单的创建过程,直接run就是一个创建并启动的容器。

查看当前虚拟机上的端口映射情况:

[root@vm000949 ~]# netstat -apn|grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      2270/docker-proxy-c 

上述是直接采用run方式,而更为正确的生命周期应该为:
create->start->exec
如果容器已经停止了,直接start,然后exec。采用run将会根据命令再创建一个docker
比如要重新开始,需要删除现在这个容器

[root@vm000949 ~]# docker rm 695d5f6afc27 
Error response from daemon: You cannot remove a running container 695d5f6afc27415126a40384a868c751ba635df2d4d7fb578424bc1bd9167166. Stop the container before attempting removal or use -f

提示不能删除一个正在运行的容器。

[root@vm000949 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
695d5f6afc27        redis               "docker-entrypoint.sh"   14 minutes ago      Up 8 minutes        127.0.0.1:6379->6379/tcp   ecstatic_lamarr

将该容器stop,并删除容器

[root@vm000949 ~]# docker stop 695d5f6afc27
695d5f6afc27

2.docker create

创建容器的语法与run相似

[root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server" -d redis
unknown shorthand flag: 'd' in -d
See 'docker create --help'.

如果直接将run修改为create,会报错,在没有开始运行无法执行-d参数

[root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server"  redis
Error response from daemon: Conflict. The name "/my-redis-server" is already in use by container d66037100bddcd230e0c9955bdfb9b0dbae8ce4028a81534e1693ab95737c90a. You have to remove (or rename) that container to be able to reuse that name.

提示上次run创建的容器没有删除

[root@vm000949 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@vm000949 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS               NAMES
d66037100bdd        redis               "docker-entrypoint.sh"   3 minutes ago       Exited (0) About a minute ago                       my-redis-server

[root@vm000949 ~]# docker rm d66037100bdd
D66037100bdd

删除后重新创建:

[root@vm000949 ~]# docker create -p 127.0.0.1:6379:6379 -it --name="my-redis-server"  redis
2596bd8886b4095dc80e23315a5e073addb50fc9aa959456e026e6ca31676d28
[root@vm000949 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
2596bd8886b4        redis               "docker-entrypoint.sh"   8 seconds ago       Created                                       my-redis-server

启动容器:

[root@vm000949 ~]# docker start my-redis-server
my-redis-server
[root@vm000949 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                      NAMES
2596bd8886b4        redis               "docker-entrypoint.sh"   About a minute ago   Up 3 seconds        127.0.0.1:6379->6379/tcp   my-redis-server
进入容器:
[root@vm000949 ~]# docker exec -it my-redis-server redis-cli
127.0.0.1:6379> exit

从上面两种方式可以看出create->start->exec的生命周期比较的直观。其中,Docker run命令包括create和start两个生命周期。

最后:docker的日志文件放在/var/lib/docker/containers/下,每个docker都有对应的文件,cat 其-json.log文件获得日志文件.在磁盘空间中,日志文件也许会占用很大的空间,就需要进行清理。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐