Docker基本命令操作

2019-03-15  本文已影响0人  小月半会飞

镜和容器的对应关系:
镜——类
容器——对象

一、镜像操作

1、查看有哪些镜像下载下来的

docker images

2、搜索某一个镜像

docker search mysql

3、下载镜像

自动下载最新版本

docker pull mysql

自行选择版本
在docker官网去搜索需要下载的工具,以及版本号(在tags部分)
官网地址:https://hub.docker.com

docker pull tomcat:8.5-alpine

4、删除镜像

根据IMAGE ID也就是镜像id删除
例:
查询镜像

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              91dadee7afee        10 days ago         477MB

删除某一个镜像

[root@localhost ~]# docker rmi 91dadee7afee
Untagged: mysql:latest
Untagged: mysql@sha256:4589ba2850b93d103e60011fe528fc56230516c1efb4d3494c33ff499505356f
Deleted: sha256:91dadee7afeebe274c51104d572ab6a2dc0ae97473f71afc57fbfd48c0ceb8aa
Deleted: sha256:82eee4082d8cbbe961ff33564cc655d1b9b4c73d118e9859bfec26a2c5e0714c
Deleted: sha256:cd9489e5896812af2e519e18470b6efe6ad19e556cefe38df1d9bab7706bdc94
Deleted: sha256:a7205b2f8740073d175dd4ee3c69d1fe44f2d31529fb947e6ded8899f0f2b52c
Deleted: sha256:f890db1a51f76670d9752256c6a897af077e608dc83711e756ddba7f22e9150b
Deleted: sha256:af3357c7a40759832f8e1188d7e73e5e1c2dfb503397ee2b8f61133bfce13b5b
Deleted: sha256:6780729a47b08db93437f74d430a865d4d0728707d134f540217a9ba773c4376
Deleted: sha256:1248c21c6b437a9b7528c6a61acc40589b9b373094a609552c91e719cb40df21
Deleted: sha256:4a9328c2c324474dcb8086184fca8490e7ecf49108df79544dd4dcf3418249ed
Deleted: sha256:8fb2b4cf6c7ae35084bc310b1895323488db795d86ba52dade834a0a0c1ccd7d
Deleted: sha256:a807a227b65063853920c7cd77eef1dbd4c79971f5774964fb2c8de13bbb3713
Deleted: sha256:f1e2c1fc3f1bd72b3bba73afc27a034da08037995fd914a3447b716b01830c17
Deleted: sha256:6744ca1b11903f4db4d5e26145f6dd20f9a6d321a7f725f1a0a7a45a4174c579

确认是否删除成功

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

二、容器操作

1、查看正在运行的容器

docker ps

查看所有容器,包括没有启动的

docker ps -a

2、启动容器

1)、普通启动

无法与Linux通信,没有做端口映射

docker run --name myTomcat -d tomcat:8.5-alpine

返回值是容器的Id

b3d1907c8c3d085ed3556ca89824d67e2459f6990a00cd78794e9f864d258500

--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器
image-name:指定运行的镜像名称以及 Tag

2)、端口映射启动

docker run --name myTomcat -d -p 8090:8080 tomcat:8.5-alpine

使用命令:docker run --name container-name:tag -d -p 服务器端口:Docker 端口 image-name
--name:自定义容器名,不指定时,docker 会自动生成一个名称
-d:表示后台运行容器
image-name:指定运行的镜像名称以及 Tag
-p 表示进行服务器与 Docker 容器的端口映射,默认情况下容器中镜像占用的端口是 Docker 容器中的端口与外界是隔绝的,必须进行端口映射才能访问

3、停止容器

根据容器的id来停止,使用命令
docker stop 容器id
代码如下:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b3d1907c8c3d        tomcat:8.5-alpine   "catalina.sh run"   5 minutes ago       Up 5 minutes        8080/tcp            myTomcat
[root@localhost ~]# docker stop b3d1907c8c3d 
b3d1907c8c3d

4、重启容器

docker start b3d1907c8c3d

5、删除容器

需要先停止容器,再删除容器

docker rm b3d1907c8c3d

6、查看日志

直接用容器名字查看

docker logs myTomcat

三、运行mysql

1、下载mysql

docker pull mysql:5.5

2、运行mysql镜像

错误运行:

docker run --name mysql01 -d mysql

正确运行:
需要用-e指定用户密码
并且需要端口映射

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 -d mysql:5.5

四、运行centos

1、下载centos

docker pull centos

2、启动centos

docker run -it --name mycentos2 -d centos

3、进入centos

docker exec -it mycentos2 /bin/bash

4、下载可以使用ifconfig命令的插件

yum install -y net-tools 

5、运行ifconfig

[root@77bfb721d749 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 6254  bytes 9896082 (9.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3475  bytes 191147 (186.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

6、退出centos

exit

五、镜像定制

1、手动定制

1.先下载centos镜像

如果有该镜像乐意跳过此步

[root@docker ~]# docker pull centos
2.启动容器并进行配置

启动容器,

[root@docker ~]# docker run -it -d --name test-centos1 centos `

命令注释:-it : 进行交互式操作

-d : 等同于 -d=true,容器将会在后台运行,不然执行一次命令后,退出后,便是exit状态了。

--name : 容器启动后的名字,默认不指定,将会随机产生一个名字。或者使用 -name="containers_name"

centos:使用的镜像名称

进入容器,安装ssh server,以及配置开机启动

[root@docker ~]# docker exec -it test-centos1 /bin/bash
[root@d72250ecaa5e /]# ifconfig
bash: ifconfig: command not found

*注:命令最后参数 /bin/bash: 指进入容器时执行的命令(command)

我们检查了下容器,暂时安装以下必用的软件吧 net-tools,openssh-server

[root@d72250ecaa5e /]# yum install openssh-server net-tools -y

创建ssh 所需的目录,并在根目录创建sshd 启动脚本

[root@d72250ecaa5e /]# mkdir -pv /var/run/sshd mkdir: created directory '/var/run/sshd'  [root@d72250ecaa5e /]# cat /auto_sshd.sh #!/bin/bash /usr/sbin/sshd -D
[root@d72250ecaa5e /]# chmod +x /auto_sshd.sh 

修改容器内root 的账户密码
可以自己随便设一个密码,一定要记住

[root@d72250ecaa5e /]# echo "root:iloveworld" | chpasswd

生成ssh 主机dsa 密钥(不然ssh 该容器时,会出现错误。)
遇到输入Enter same passphrase again:时候,直接回车跳过

[root@d72250ecaa5e /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
[root@d72250ecaa5e /]# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

我们加一个history记录的时间功能吧,这样方便后期查看

echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile

OK,配置基本完毕咯。清理命令历史纪录,之后退出容器。现在可以生成一个新的docker 镜像了。

3.配置完成后,进行打包成新的镜像
1)、普通打包镜像
[root@docker ~]# docker commit test-centos1 centos_sshd
sha256:6e3330b30dfff5f029f102874e54cfffffbc37dcf2a4eb7304c817148fbc944d
[root@docker ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
centos_sshd                   latest              6e3330b30dff        8 seconds ago       310.1 MB
docker.io/ubuntu             latest              e4415b714b62        12 days ago         128.1 MB

命令注释:commit: 提交一个具有新配置的容器成为镜像,后面跟容器的name 或者容器Id ,最后是生成新镜像的名字

2)、设置开机选项打包镜像

更新:这条命令更方便以后启动,如下:

[root@docker ~]# docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" test-centos1 centos_sshd
sha256:7bb4efd82c4ff1f241cbc57ee45aab1b05d214b1e9fcd51196696c67d480e70b

命令注释: --change : 将后期使用此镜像运行容器时的命令参数、开放的容器端口提前设置好。开启的时候自动运行auto_sshd.sh脚本
-c "EXPOSE 22" :暴露22端口,默认也是暴露的

4.验证

查看镜像,并启动新的容器

[root@docker ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
centos_sshd                   latest              7bb4efd82c4f        4 minutes ago       310.1 MB
docker.io/ubuntu             latest              e4415b714b62        12 days ago         128.1 MB
[root@docker ~]# docker run -d -it --name my_centos centos_sshd ec17e553d5c4c60865afeb99df8dfd1f4e7d4ba6e1b0d5516f9127f09d1d6356
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS           PORTS          NAMES
ec17e553d5c4        centos_sshd           "/auto_sshd.sh"          6 seconds ago       Up 5 seconds             22/tcp         my_centos

进行ssh测试,先查看一下该容器的ip,之后ssh。ok

[root@docker ~]# docker exec -it my_centos /bin/bash
[root@docker ~]# ssh root@172.17.0.4  //或者ssh 127.17.0.4
RSA key fingerprint is 87:88:07:12:ac:0a:90:28:10:e1:9e:eb:1f:d6:c9:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.4' (RSA) to the list of known hosts.
root@172.17.0.4's password: 
Last login: Tue Nov 29 16:00:49 2016 from gateway

[root@ec17e553d5c4 ~]# w   
 16:34:17 up 63 days,  7:49,  1 user,  load average: 0.00, 0.02, 0.05 USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    gateway          16:34    1.00s  0.00s  0.00s w [root@ec17e553d5c4 ~]# ping gateway
PING gateway (172.17.0.1) 56(84) bytes of data. 64 bytes from gateway (172.17.0.1): icmp_seq=1 ttl=64 time=0.048 ms

2.利用Dockerfile文件自动定制

1、创建Dockerfile文件

[root@localhost ~]#  mkdir centos7-dockerfile
[root@localhost ~]#  cd centos7-dockerfile/
[root@localhost ~]#  cat Dockerfile 
# The dockerfile has Change add sshd services on Centos7.0
#centos7:latest image
FROM centos:latest

MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng

#Install sshd net-tools
RUN yum install openssh-server net-tools -y
RUN mkdir /var/run/sshd

#Set password for root
RUN echo 'root:iloveworld' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

#Set history record
ENV HISTTIMEFORMAT "%F %T  "

#Fix sshd service:Read from socket failed: Connection reset by peer?
RUN ssh-keygen -A

#Change timezone CST
RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#Open 22 port
EXPOSE 22

#Auto running sshd service
CMD ["/usr/sbin/sshd","-D"]
``
###2.执行build 创建镜像

docker build -t centos_new .

###3.查看镜像列表,并创建容器
输入密码即可

[root@localhost centos7-dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_new latest 37244727ac6e About a minute ago 283MB
centos latest 1e1148e4cc2c 3 months ago 202MB
[root@localhost centos7-dockerfile]# docker run -it -d --name contain_new centos_new
d99be6d58a1cba6dbcd0d2cd2448a557faf14ee7897bafe1ef60b04875901cd3
[root@localhost centos7-dockerfile]# docker exec contain_new hostname -i
172.17.0.2
[root@localhost centos7-dockerfile]# ssh 127.17.0.2
root@127.17.0.2's password:

上一篇下一篇

猜你喜欢

热点阅读