In this example, we will find out how to use copy files inside Docker. Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.
Docker provides the ability to package and run an application in a loosely isolated environment called a container. The isolation and security allow you to run many containers simultaneously on a given host. Containers are lightweight and contain everything needed to run the application, so you do not need to rely on what is currently installed on the host. You can easily share containers while you work, and be sure that everyone you share with gets the same container that works in the same way.
2. Docker Copy file
Use the docker cp command to copy files/folders between a container and the local filesystem.
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp utility copies the contents of
SRC_PATH to the
DEST_PATH. You can copy a file or a folder from a docker container to a local file system or vice-versa. If
- is specified for either the
DEST_PATH, you can also stream a tar archive from
STDIN or to
STDOUT. You can use the
docker cp command on a stopped container. The
docker cp command assumes container paths are relative to the container’s
/ (root) directory. This means supplying the initial forward slash is optional; The command sees
<my-container>:opt/example.txt as identical. Local machine paths can be an absolute or relative value. The command interprets a local machine’s relative paths as relative to the current working directory where
docker cp is run.
cp command behaves like the Unix
cp -a command in that directories are copied recursively with permissions preserved if possible. Ownership is set to the user and primary group at the destination.
In this section we will look at a working example of
docker cp command. . This example assumes that you have docker installed on your machine. To check if docker is installed run the docker -v command on your terminal:
~$ docker -v Docker version 20.10.8, build 3967b7d
We will use the MySQL docker image for this example. MySQL is a widely used, open-source relational database management system (RDBMS). With its proven performance, reliability, and ease of use, MySQL has become the leading database choice for web-based applications, covering the entire range from personal projects and websites, via e-commerce and information services, all the way to high-profile web properties including Facebook, Twitter, YouTube, Yahoo! and many more.
Run the below command to start the MySQL in docker:
~$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:latest 6d442460ee26f70582be3e618cb81be93b1ab318a3f40ce5b0951aa94d28f6db
The long id is the container id. The
-d option tells the docker to run in detached mode. To check if the image was downloaded correctly and the container is running run the below command:
~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d442460ee26 mysql:latest "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp mysql ~$
The docker exec command allows you to run commands inside a Docker container. The following command line will give you a bash shell inside your mysql container:
~$ docker exec -it mysql /bin/bash root@6d442460ee26:/#
Let us create a file in the tmp folder then copy this file from the docker container to the local host:
root@a76b64877ee5:/# cd tmp root@a76b64877ee5:/tmp# ls -lart > test.txt root@a76b64877ee5:/tmp# cat test.txt total 8 drwxr-xr-x 1 root root 4096 Jun 15 10:17 .. -rw-r--r-- 1 root root 0 Jun 15 10:24 test.txt drwxrwxrwt 1 root root 4096 Jun 15 10:24 .
Now let us copy this file onto the local host, we need to exit from the container
~$ cat test.txt total 8 drwxr-xr-x 1 root root 4096 Jun 15 10:17 .. -rw-r--r-- 1 root root 0 Jun 15 10:24 test.txt drwxrwxrwt 1 root root 4096 Jun 15 10:24 .
Now let us copy a file from localhost into the docker container:
~$ ls -lart > test2.txt ~$ docker cp test2.txt mysql:/tmp/test2.txt ~$ docker exec -it mysql /bin/bash root@a76b64877ee5:/# cd tmp root@a76b64877ee5:/tmp# ls -lart total 20 -rw-r--r-- 1 root root 145 Jun 15 10:24 test.txt -rw-r--r-- 1 501 dialout 5011 Jun 15 10:29 test2.txt drwxr-xr-x 1 root root 4096 Jun 15 10:29 .. drwxrwxrwt 1 root root 4096 Jun 15 10:29 .
In this article, we looked at how to copy a file from localhost into a docker container and vice-versa using docker copy. First, we discussed what Docker is and why it is so useful. Then in the end we looked at a working example where we started a MySQL docker container – then copied the files from and into this container. It is not possible to copy certain system files such as resources under
tmpfs, and mounts created by the user in the container. However, you can still copy such files by manually running